PolyFEM
Loading...
Searching...
No Matches
polyfem::varform::LinearElasticVarForm Class Reference

#include <LinearElasticVarForm.hpp>

Inheritance diagram for polyfem::varform::LinearElasticVarForm:
[legend]
Collaboration diagram for polyfem::varform::LinearElasticVarForm:
[legend]

Public Member Functions

std::string name () const override
 Get the name of the variational formulation.
 
std::vector< io::OutputFieldoutput_fields (const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options) const override
 Get the output fields of the variational formulation, for output purposes.
 
- Public Member Functions inherited from polyfem::varform::ElasticVarForm
void init (const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override
 Initialize the variational formulation with the given parameters.
 
void save_json (const Eigen::MatrixXd &solution, std::ostream &out) const override
 Save the solution to a JSON file, for output purposes.
 
void export_data (const Eigen::MatrixXd &solution) const override
 
io::OutputSpace output_space () const override
 Get the output space of the variational formulation, for output purposes.
 
io::OutStatsData compute_errors (const Eigen::MatrixXd &solution) override
 Get the error statistics of the variational formulation, for output purposes.
 
- Public Member Functions inherited from polyfem::varform::VarForm
virtual ~VarForm ()=default
 
void set_args (const json &args)
 Reset the internal state of the variational formulation, e.g.
 
void set_mesh (std::unique_ptr< mesh::Mesh > mesh, const double loading_mesh_time=0)
 Set the mesh for the variational formulation.
 
void solve (Eigen::MatrixXd &sol)
 Solve the variational formulation and store the solution in the given matrix.
 
void set_time_callback (const std::function< void(int, int, double, double)> &callback)
 
int problem_dimension () const
 Get the problem dimension of the variational formulation, for output purposes.
 
virtual bool is_contact_enabled () const
 Check if contact is enabled for the variational formulation, for output purposes.
 
const io::OutRuntimeDataoutput_timings () const
 Get the runtime timings of the variational formulation, for output purposes.
 
void save_json (const Eigen::MatrixXd &solution) const
 Save the solution to a JSON file, for output purposes.
 

Private Member Functions

void reset () override
 
void solve_problem (Eigen::MatrixXd &sol) override
 
void init_linear_solve (Eigen::MatrixXd &sol, const double t)
 
void build_stiffness_mat (StiffnessMatrix &stiffness)
 
void solve_linear_system (const std::unique_ptr< polysolve::linear::Solver > &solver, StiffnessMatrix &A, Eigen::VectorXd &b, const bool compute_spectrum, Eigen::MatrixXd &sol)
 
void solve_static_linear (Eigen::MatrixXd &sol)
 
void solve_transient_linear (Eigen::MatrixXd &sol)
 

Private Attributes

std::shared_ptr< solver::ElasticForm > elastic_form
 
std::shared_ptr< solver::BodyFormbody_form
 
std::shared_ptr< solver::InertiaForminertia_form
 
std::shared_ptr< time_integrator::ImplicitTimeIntegratortime_integrator
 

Friends

class polyfem::test::VarFormTestAccess
 

Additional Inherited Members

- Protected Member Functions inherited from polyfem::varform::ElasticVarForm
void load_mesh (const mesh::Mesh &mesh, const json &args) override
 
void build_basis (mesh::Mesh &mesh, const bool iso_parametric, const json &args) override
 
void assemble_rhs (const mesh::Mesh &mesh) override
 
void assemble_mass_mat (const mesh::Mesh &mesh, const json &args) override
 
void build_rhs_assembler () override
 
void initial_velocity (Eigen::MatrixXd &velocity) const
 
void initial_acceleration (Eigen::MatrixXd &acceleration) const
 
void initial_elastic_solution (Eigen::MatrixXd &solution) const
 
QuadratureOrders elastic_boundary_samples () const
 
std::vector< int > elastic_primitive_to_node () const
 
std::vector< int > elastic_node_to_primitive () const
 
void build_mesh_matrices (Eigen::MatrixXd &V, Eigen::MatrixXi &F) const
 
void save_elastic_step_state (const double t0, const double dt, const int t, const time_integrator::ImplicitTimeIntegrator *time_integrator) const
 
std::vector< io::OutputFieldelastic_output_fields (const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options, const mesh::Obstacle *obstacle, const time_integrator::ImplicitTimeIntegrator *time_integrator, const std::vector< std::pair< std::string, std::shared_ptr< solver::Form > > > &named_forms, const solver::Form *elastic_form, const solver::ContactForm *contact_form=nullptr) const
 
void append_primary_output_fields (std::vector< io::OutputField > &fields, const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options, const mesh::Obstacle *obstacle=nullptr) const
 
Eigen::MatrixXd displaced_output_normals (const io::OutputSample &sample, const Eigen::MatrixXd &solution) const
 
virtual int n_obstacle_vertices () const
 
- Protected Member Functions inherited from polyfem::varform::VarForm
std::string resolve_output_path (const std::string &path) const
 
std::string resolve_input_path (const std::string &path, const bool only_if_exists=false) const
 
void set_materials (assembler::Assembler &assembler, const int size) const
 
void assign_discr_orders (const json &discr_order, const mesh::Mesh &mesh, Eigen::VectorXi &disc_orders)
 
void prepare ()
 
QuadratureOrders n_boundary_samples (const int discr_order, const int gdiscr_order) const
 
void build_fe_space (mesh::Mesh &mesh, const bool iso_parametric, const Eigen::VectorXi &disc_orders, const std::string &basis_type, const std::string &poly_basis_type, const assembler::Assembler &space_assembler, const int value_dim, const int quadrature_order, const int mass_quadrature_order, const bool use_corner_quadrature, const int n_harmonic_samples, const int integral_constraints, FESpace &space, VarFormBoundaryState &boundary, std::shared_ptr< GeometryMapping > geometry=nullptr)
 
std::shared_ptr< time_integrator::BDFmake_bdf_time_integrator () const
 
void save_step_state (const double t0, const double dt, const int t, const time_integrator::ImplicitTimeIntegrator *time_integrator, const bool rest_mesh_written=false) const
 
void ensure_output_sampler () const
 
void save_restart_json (const double t0, const double dt, const int t, const bool rest_mesh_written) const
 
void save_timestep (const double time, const int t, const double t0, const double dt, const Eigen::MatrixXd &solution) const
 
void save_subsolve (const int i, const int t, const Eigen::MatrixXd &solution) const
 
int output_file_index (const int t) const
 
void notify_time_step (const int t, const int time_steps, const double t0, const double dt) const
 
io::OutGeometryData::ExportOptions export_options (const io::OutputSpace &space) const
 
io::OutputFieldFunction output_field_function (const Eigen::MatrixXd &solution, const io::OutGeometryData::ExportOptions &opts) const
 
- Static Protected Member Functions inherited from polyfem::varform::VarForm
static bool read_initial_x_from_file (const std::string &state_path, const std::string &x_name, const bool reorder, const Eigen::VectorXi &in_node_to_node, const int dim, Eigen::MatrixXd &x)
 
static void rebuild_node_positions (const std::vector< basis::ElementBases > &bases, const std::vector< int > &node_ids, std::vector< RowVectorNd > &positions)
 
- Protected Attributes inherited from polyfem::varform::ElasticVarForm
FESpace space_
 
VarFormBoundaryState boundary_
 
assembler::AssemblyValsCache ass_vals_cache_
 
assembler::AssemblyValsCache mass_ass_vals_cache_
 
assembler::AssemblyValsCache pure_mass_ass_vals_cache_
 
std::shared_ptr< assembler::RhsAssemblerrhs_assembler_
 
StiffnessMatrix mass_
 
StiffnessMatrix pure_mass_
 
double avg_mass_ = 0
 
Eigen::MatrixXd rhs_
 
std::shared_ptr< assembler::Assemblerprimary_assembler_ = nullptr
 
std::shared_ptr< assembler::Massmass_assembler_ = nullptr
 
std::shared_ptr< assembler::HRZMasspure_mass_assembler_ = nullptr
 
double t0 = 0
 
int time_steps = 0
 
double dt = 0
 
- Protected Attributes inherited from polyfem::varform::VarForm
std::shared_ptr< assembler::Problemproblem
 current problem, it contains rhs and bc
 
Units units
 
json args
 
io::OutStatsData stats
 
io::OutRuntimeData timings
 runtime statistics
 
std::string root_path
 
std::string output_path
 
std::unique_ptr< mesh::Meshmesh_
 
std::function< void(int, int, double, double)> time_callback
 
io::OutGeometryData output_geometry_
 
bool output_sampler_initialized_ = false
 
bool prepared_ = false
 

Detailed Description

Definition at line 21 of file LinearElasticVarForm.hpp.

Member Function Documentation

◆ build_stiffness_mat()

void polyfem::varform::LinearElasticVarForm::build_stiffness_mat ( StiffnessMatrix stiffness)
private

◆ init_linear_solve()

void polyfem::varform::LinearElasticVarForm::init_linear_solve ( Eigen::MatrixXd &  sol,
const double  t 
)
private

Definition at line 109 of file LinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::varform::ElasticVarForm::ass_vals_cache_, polyfem::varform::FESpace::bases, body_form, polyfem::varform::ElasticVarForm::boundary_, polyfem::varform::VarFormBoundaryState::boundary_nodes, polyfem::time_integrator::ImplicitTimeIntegrator::construct_time_integrator(), polyfem::varform::ElasticVarForm::dt, polyfem::varform::ElasticVarForm::elastic_boundary_samples(), elastic_form, polyfem::varform::FESpace::geometry_basis_list(), inertia_form, polyfem::varform::ElasticVarForm::initial_acceleration(), polyfem::varform::ElasticVarForm::initial_elastic_solution(), polyfem::varform::ElasticVarForm::initial_velocity(), polyfem::varform::VarFormBoundaryState::local_boundary, polyfem::varform::VarFormBoundaryState::local_neumann_boundary, polyfem::varform::ElasticVarForm::mass_, polyfem::varform::ElasticVarForm::mass_assembler_, polyfem::varform::VarForm::mesh_, polyfem::varform::FESpace::n_bases, POLYFEM_SCOPED_TIMER, polyfem::varform::ElasticVarForm::primary_assembler_, polyfem::varform::VarForm::problem, polyfem::varform::ElasticVarForm::rhs_, polyfem::varform::ElasticVarForm::rhs_assembler_, polyfem::varform::ElasticVarForm::space_, and time_integrator.

Referenced by solve_problem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ name()

std::string polyfem::varform::LinearElasticVarForm::name ( ) const
inlineoverridevirtual

Get the name of the variational formulation.

Returns
Name of the variational formulation

Implements polyfem::varform::VarForm.

Definition at line 26 of file LinearElasticVarForm.hpp.

◆ output_fields()

std::vector< io::OutputField > polyfem::varform::LinearElasticVarForm::output_fields ( const io::OutputSample sample,
const Eigen::MatrixXd &  solution,
const io::OutputFieldOptions options 
) const
overridevirtual

Get the output fields of the variational formulation, for output purposes.

Parameters
sampleOutput sample
solutionSolution matrix
optionsOutput field options
Returns
Output fields

Implements polyfem::varform::VarForm.

Definition at line 39 of file LinearElasticVarForm.cpp.

References body_form, elastic_form, polyfem::varform::ElasticVarForm::elastic_output_fields(), inertia_form, and time_integrator.

Here is the call graph for this function:

◆ reset()

void polyfem::varform::LinearElasticVarForm::reset ( )
overrideprivatevirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 30 of file LinearElasticVarForm.cpp.

References body_form, elastic_form, inertia_form, polyfem::varform::ElasticVarForm::reset(), and time_integrator.

Here is the call graph for this function:

◆ solve_linear_system()

void polyfem::varform::LinearElasticVarForm::solve_linear_system ( const std::unique_ptr< polysolve::linear::Solver > &  solver,
StiffnessMatrix A,
Eigen::VectorXd &  b,
const bool  compute_spectrum,
Eigen::MatrixXd &  sol 
)
private

Definition at line 73 of file LinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::varform::ElasticVarForm::boundary_, polyfem::varform::VarFormBoundaryState::boundary_nodes, polyfem::logger(), polyfem::varform::VarForm::mesh_, polyfem::varform::FESpace::n_bases, polyfem::varform::ElasticVarForm::primary_assembler_, polyfem::varform::VarForm::problem, polyfem::varform::ElasticVarForm::rhs_assembler_, polyfem::io::OutStatsData::solver_info, polyfem::varform::ElasticVarForm::space_, polyfem::io::OutStatsData::spectrum, polyfem::varform::VarForm::stats, and x.

Referenced by solve_static_linear(), and solve_transient_linear().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ solve_problem()

◆ solve_static_linear()

void polyfem::varform::LinearElasticVarForm::solve_static_linear ( Eigen::MatrixXd &  sol)
private

Definition at line 157 of file LinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::varform::ElasticVarForm::boundary_, polyfem::varform::VarFormBoundaryState::boundary_nodes, build_stiffness_mat(), polyfem::varform::ElasticVarForm::elastic_boundary_samples(), polyfem::varform::VarFormBoundaryState::local_boundary, polyfem::varform::VarFormBoundaryState::local_neumann_boundary, polyfem::logger(), polyfem::varform::ElasticVarForm::rhs_, polyfem::varform::ElasticVarForm::rhs_assembler_, and solve_linear_system().

Referenced by solve_problem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ solve_transient_linear()

Friends And Related Symbol Documentation

◆ polyfem::test::VarFormTestAccess

friend class polyfem::test::VarFormTestAccess
friend

Definition at line 23 of file LinearElasticVarForm.hpp.

Member Data Documentation

◆ body_form

std::shared_ptr<solver::BodyForm> polyfem::varform::LinearElasticVarForm::body_form
private

Definition at line 49 of file LinearElasticVarForm.hpp.

Referenced by init_linear_solve(), output_fields(), and reset().

◆ elastic_form

std::shared_ptr<solver::ElasticForm> polyfem::varform::LinearElasticVarForm::elastic_form
private

Definition at line 48 of file LinearElasticVarForm.hpp.

Referenced by init_linear_solve(), output_fields(), and reset().

◆ inertia_form

std::shared_ptr<solver::InertiaForm> polyfem::varform::LinearElasticVarForm::inertia_form
private

Definition at line 50 of file LinearElasticVarForm.hpp.

Referenced by init_linear_solve(), output_fields(), and reset().

◆ time_integrator

std::shared_ptr<time_integrator::ImplicitTimeIntegrator> polyfem::varform::LinearElasticVarForm::time_integrator
private

The documentation for this class was generated from the following files: