12 const std::vector<basis::ElementBases> &bases,
13 const std::vector<basis::ElementBases> &geom_bases,
14 std::shared_ptr<assembler::Assembler> stokes_assembler,
21 geom_bases_(geom_bases),
22 stokes_assembler_(std::move(stokes_assembler)),
23 navier_stokes_assembler_(navier_stokes_assembler),
24 ass_vals_cache_(ass_vals_cache),
38 const Eigen::VectorXd &
x,
const bool picard,
StiffnessMatrix &jacobian)
const
45 x, Eigen::MatrixXd(),
cache, jacobian);
54 const Eigen::VectorXd &
x, Eigen::VectorXd &residual)
const
77 const int n_velocity_bases,
78 const int n_pressure_bases,
79 const std::vector<basis::ElementBases> &velocity_bases,
80 const std::vector<basis::ElementBases> &pressure_bases,
81 const std::vector<basis::ElementBases> &geom_bases,
87 : velocity_ndof_(n_velocity_bases * assembler.size()),
88 pressure_ndof_(n_pressure_bases)
93 n_pressure_bases, n_velocity_bases,
94 pressure_bases, velocity_bases, geom_bases,
95 pressure_cache, velocity_cache, t, mixed);
97 std::vector<Eigen::Triplet<double>>
entries;
98 entries.reserve(2 * mixed.nonZeros());
99 for (
int k = 0; k < mixed.outerSize(); ++k)
100 for (StiffnessMatrix::InnerIterator it(mixed, k); it; ++it)
112 const double velocity_weight,
const double pressure_weight)
124 const Eigen::VectorXd &
x, Eigen::VectorXd &residual)
const
135 for (
int k = 0; k < jacobian.outerSize(); ++k)
136 for (StiffnessMatrix::InnerIterator it(jacobian, k); it; ++it)
142 assert(n_pressure_bases > 0);
143 const double value = 1.0 / n_pressure_bases;
144 std::vector<Eigen::Triplet<double>>
entries;
145 entries.reserve(2 * n_pressure_bases);
146 for (
int i = 0; i < n_pressure_bases; ++i)
151 jacobian_.resize(n_pressure_bases + 1, n_pressure_bases + 1);
162 const Eigen::VectorXd &
x, Eigen::VectorXd &residual)
const
std::unique_ptr< MatrixCache > cache
std::vector< Eigen::Triplet< double > > entries
Caches basis evaluation and geometric mapping at every element.
void assemble(const bool is_volume, const int n_psi_basis, const int n_phi_basis, const std::vector< basis::ElementBases > &psi_bases, const std::vector< basis::ElementBases > &phi_bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &psi_cache, const AssemblyValsCache &phi_cache, const double t, StiffnessMatrix &stiffness) const
Eigen::MatrixXd assemble_hessian(const NonLinearAssemblerData &data) const override
void set_picard(const bool val)
void log_and_throw_error(const std::string &msg)
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix