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,
35 const std::string bc_method,
36 const json &solver_params);
39 void assemble(
const Density &density, Eigen::MatrixXd &rhs,
const double t = 1)
const;
53 const std::vector<mesh::LocalBoundary> &local_boundary,
54 const std::vector<int> &bounday_nodes,
56 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
58 const Eigen::MatrixXd &displacement = Eigen::MatrixXd(),
59 const double t = 1)
const;
63 const Eigen::MatrixXd &displacement,
64 const Eigen::MatrixXd &displacement_prev,
65 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
68 const double t)
const;
71 const std::vector<mesh::LocalBoundary> &local_boundary,
72 const std::vector<int> &bounday_nodes,
75 const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
76 const Eigen::MatrixXd &final_rhs,
78 Eigen::MatrixXd &rhs)
const;
81 void compute_energy_hess(
const std::vector<int> &bounday_nodes,
const int resolution,
const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
const Eigen::MatrixXd &displacement,
const double t,
const bool project_to_psd,
StiffnessMatrix &hess)
const;
85 inline const std::vector<basis::ElementBases> &
bases()
const {
return bases_; }
86 inline const std::vector<basis::ElementBases> &
gbases()
const {
return gbases_; }
92 void lsq_bc(
const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
93 const std::vector<mesh::LocalBoundary> &local_boundary,
const std::vector<int> &bounday_nodes,
const int resolution, Eigen::MatrixXd &rhs)
const;
96 void sample_bc(
const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
97 const std::vector<mesh::LocalBoundary> &local_boundary,
const std::vector<int> &bounday_nodes, Eigen::MatrixXd &rhs)
const;
103 const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &df,
104 const std::function<
void(
const Eigen::MatrixXi &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &nf,
105 const std::vector<mesh::LocalBoundary> &local_boundary,
const std::vector<int> &bounday_nodes,
const int resolution,
const std::vector<mesh::LocalBoundary> &local_neumann_boundary,
106 const Eigen::MatrixXd &displacement,
const double t, Eigen::MatrixXd &rhs)
const;
111 void time_bc(
const std::function<
void(
const mesh::Mesh &,
const Eigen::MatrixXi &,
const Eigen::MatrixXd &, Eigen::MatrixXd &)> &fun, Eigen::MatrixXd &sol)
const;
118 const std::vector<basis::ElementBases> &
bases_;
119 const std::vector<basis::ElementBases> &
gbases_;
void set_bc(const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const int resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, Eigen::MatrixXd &rhs, const Eigen::MatrixXd &displacement=Eigen::MatrixXd(), const double t=1) 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 int resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &displacement, const double t, Eigen::MatrixXd &rhs) const
void compute_energy_grad(const std::vector< mesh::LocalBoundary > &local_boundary, const std::vector< int > &bounday_nodes, const Density &density, const int resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &final_rhs, const double t, Eigen::MatrixXd &rhs) const
void compute_energy_hess(const std::vector< int > &bounday_nodes, const int resolution, const std::vector< mesh::LocalBoundary > &local_neumann_boundary, const Eigen::MatrixXd &displacement, const double t, const bool project_to_psd, StiffnessMatrix &hess) const
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
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