25 const std::vector<int> &dirichlet_nodes,
26 const std::vector<int> &neumann_nodes,
27 const std::vector<RowVectorNd> &dirichlet_nodes_position,
28 const std::vector<RowVectorNd> &neumann_nodes_position,
31 const std::vector<basis::ElementBases> &
bases,
32 const std::vector<basis::ElementBases> &
gbases,
36 const std::string bc_method,
37 const json &solver_params,
38 const int fe_space_id = -1);
41 void assemble(
const Density &density, Eigen::MatrixXd &rhs,
const double t = 1)
const;
55 const std::vector<mesh::LocalBoundary> &local_boundary,
56 const std::vector<int> &bounday_nodes,
58 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
60 const Eigen::MatrixXd &displacement = Eigen::MatrixXd(),
61 const double t = 1)
const;
65 const Eigen::MatrixXd &displacement,
66 const Eigen::MatrixXd &displacement_prev,
67 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
70 const double t)
const;
73 const std::vector<mesh::LocalBoundary> &local_boundary,
74 const std::vector<int> &bounday_nodes,
77 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
78 const Eigen::MatrixXd &final_rhs,
80 Eigen::MatrixXd &rhs)
const;
85 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
86 const Eigen::MatrixXd &displacement,
88 const bool project_to_psd,
93 inline const std::vector<basis::ElementBases> &
bases()
const {
return bases_; }
94 inline const std::vector<basis::ElementBases> &
gbases()
const {
return gbases_; }
100 void lsq_bc(
const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
101 const std::vector<mesh::LocalBoundary> &local_boundary,
102 const std::vector<int> &bounday_nodes,
103 const int resolution,
104 Eigen::MatrixXd &rhs)
const;
107 void sample_bc(
const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
108 const std::vector<mesh::LocalBoundary> &local_boundary,
109 const std::vector<int> &bounday_nodes,
110 Eigen::MatrixXd &rhs)
const;
116 const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
117 const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &nf,
118 const std::vector<mesh::LocalBoundary> &local_boundary,
119 const std::vector<int> &bounday_nodes,
121 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
122 const Eigen::MatrixXd &displacement,
124 Eigen::MatrixXd &rhs)
const;
129 void time_bc(
const std::function<
void(
const mesh::Mesh &,
const Eigen::MatrixXi &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &fun, Eigen::MatrixXd &sol)
const;
136 const std::vector<basis::ElementBases> &
bases_;
137 const std::vector<basis::ElementBases> &
gbases_;
Caches basis evaluation and geometric mapping at every element.
void time_bc(const std::function< void(const mesh::Mesh &, const Eigen::MatrixXi &, const Eigen::MatrixXd &, Eigen::MatrixXd &)> &fun, Eigen::MatrixXd &sol) const
void compute_energy_hess(const std::vector< int > &bounday_nodes, const QuadratureOrders &resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &displacement, const double t, const bool project_to_psd, StiffnessMatrix &hess) const
const Assembler & assembler_
const AssemblyValsCache & ass_vals_cache() const
const io::ResourceIO & resources_
void set_bc(const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const QuadratureOrders &resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, Eigen::MatrixXd &rhs, const Eigen::MatrixXd &displacement=Eigen::MatrixXd(), const double t=1) const
const mesh::Mesh & mesh() const
const std::vector< RowVectorNd > & neumann_nodes_position_
const std::vector< basis::ElementBases > & gbases_
basis functions associated with geometric mapping
const Problem & problem() const
const mesh::Obstacle * obstacle_
const int size_
dimension of problem
double compute_energy(const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Density &density, const QuadratureOrders &resolution, const double t) const
const std::vector< int > & neumann_nodes_
const std::vector< RowVectorNd > & dirichlet_nodes_position_
const std::string bc_method_
const Assembler & assembler() const
const AssemblyValsCache & ass_vals_cache_
void initial_solution(Eigen::MatrixXd &sol) const
const json solver_params_
void lsq_bc(const std::function< void(const Eigen::MatrixXi &, const Eigen::MatrixXd &, const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df, const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const int resolution, Eigen::MatrixXd &rhs) const
const std::vector< basis::ElementBases > & bases_
basis functions associated with solution
const std::vector< basis::ElementBases > & gbases() const
void compute_energy_grad(const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const Density &density, const QuadratureOrders &resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &final_rhs, const double t, Eigen::MatrixXd &rhs) const
void set_bc(const std::function< void(const Eigen::MatrixXi &, const Eigen::MatrixXd &, const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df, const std::function< void(const Eigen::MatrixXi &, const Eigen::MatrixXd &, const Eigen::MatrixXd &, const Eigen::MatrixXd &, Eigen::MatrixXd &)> &nf, const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const QuadratureOrders &resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &displacement, const double t, Eigen::MatrixXd &rhs) const
void initial_acceleration(Eigen::MatrixXd &sol) const
void initial_velocity(Eigen::MatrixXd &sol) const
void assemble(const Density &density, Eigen::MatrixXd &rhs, const double t=1) const
const std::vector< int > & dirichlet_nodes_
const std::vector< basis::ElementBases > & bases() const
void sample_bc(const std::function< void(const Eigen::MatrixXi &, const Eigen::MatrixXd &, const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df, const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, Eigen::MatrixXd &rhs) const
Read-only interface to a hierarchical collection of simulation resources.
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
std::array< int, 2 > QuadratureOrders
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix