PolyFEM
Loading...
Searching...
No Matches
polyfem::varform::DifferentiableLinearElasticVarForm Class Referencefinal

#include <DifferentiableLinearElasticVarForm.hpp>

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

Public Member Functions

std::string name () const override
 Get the name of the variational formulation.
 
void solve (Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step, bool differentiable) override
 
void prepare () override
 
void save_vtu (const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override
 
jsonget_args () override
 
const jsonget_args () const override
 
const mesh::Meshget_mesh () const override
 
assembler::Problemget_problem () override
 
const assembler::Problemget_problem () const override
 
const std::string & get_root_path () const override
 
std::string input_path (const std::string &path, bool only_if_exists=false) const override
 
std::string output_file_path (const std::string &path) const override
 
const Unitsget_units () const override
 
bool is_contact_enabled () const override
 Check if contact is enabled for the variational formulation, for output purposes.
 
const FESpaceprimary_space () const override
 
const VarFormBoundaryStateboundary_state () const override
 
const assembler::Assemblerprimary_assembler () const override
 
const assembler::Massmass_assembler () const override
 
const assembler::AssemblyValsCacheassembly_cache () const override
 
const assembler::AssemblyValsCachemass_assembly_cache () const override
 
const StiffnessMatrixmass_matrix () const override
 
solver::SolveDatasolve_data () override
 
const solver::SolveDatasolve_data () const override
 
void initial_solution (Eigen::MatrixXd &solution, const InitialConditionOverride *override=nullptr) const override
 
void initial_velocity (Eigen::MatrixXd &velocity, const InitialConditionOverride *override=nullptr) const override
 
void initial_acceleration (Eigen::MatrixXd &acceleration, const InitialConditionOverride *override=nullptr) const override
 
- Public Member Functions inherited from polyfem::varform::LinearElasticVarForm
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, const InitialConditionOverride *initial_condition_override=nullptr, const ForwardStepCallback &post_step={})
 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.
 
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.
 
- Public Member Functions inherited from polyfem::varform::DifferentiableVarForm
virtual ~DifferentiableVarForm ()=default
 
virtual const ipc::CollisionMesh & collision_mesh () const
 
virtual const mesh::Obstacleget_obstacle () const
 
virtual const assembler::ViscousDampingdamping_assembler () const
 
virtual const assembler::ViscousDampingPrevdamping_prev_assembler () const
 
virtual Eigen::MatrixXd displacement_gradient () const
 
void get_vertices (Eigen::MatrixXd &vertices) const
 
std::unordered_map< int, std::array< bool, 3 > > boundary_conditions_ids (const std::string &bc_type) const
 
bool is_homogenization () const
 
bool has_periodic_boundary () const
 
Eigen::MatrixXd periodic_tile_offsets () const
 
bool is_adhesion_enabled () const
 
bool is_pressure_enabled () const
 
bool has_constraints () const
 
bool is_problem_linear () const
 
void build_stiffness_matrix (StiffnessMatrix &stiffness) const
 
std::vector< int > primitive_to_node () const
 
std::vector< int > node_to_primitive () const
 
void get_elements (Eigen::MatrixXi &elements) const
 
QuadratureOrders n_boundary_samples () const
 
void set_vertex_positions (const Eigen::MatrixXd &vertices)
 
virtual void set_lame_parameters (const Eigen::VectorXd &lambda, const Eigen::VectorXd &mu)
 
virtual void set_friction_coefficient (double coefficient)
 
virtual void set_damping_coefficients (double psi, double phi)
 
virtual void set_dirichlet_boundary (int boundary_id, int time_step, const Eigen::VectorXd &value)
 
virtual void set_dirichlet_nodes (const Eigen::VectorXi &input_nodes, const Eigen::MatrixXd &values)
 
virtual void set_pressure_boundary (int boundary_id, int time_step, double value)
 

Protected Member Functions

mesh::Meshmutable_mesh () override
 
void invalidate_after_geometry_update () override
 
void invalidate_after_parameter_update () override
 
QuadratureOrders boundary_samples (int discr_order, int discr_orderq, int geometry_discr_order) const override
 
- Protected Member Functions inherited from polyfem::varform::LinearElasticVarForm
void reset () override
 
void solve_problem (Eigen::MatrixXd &sol, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
 
void init_linear_solve (Eigen::MatrixXd &sol, const double t, const InitialConditionOverride *initial_condition_override)
 
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, const ForwardStepCallback &post_step)
 
void solve_transient_linear (Eigen::MatrixXd &sol, const ForwardStepCallback &post_step)
 
- 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 build_elastic_basis (mesh::Mesh &mesh, const bool iso_parametric, const json &args, const int fe_space_id)
 
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_solution (Eigen::MatrixXd &solution, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") const
 
void initial_velocity (Eigen::MatrixXd &velocity, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") const
 
void initial_acceleration (Eigen::MatrixXd &acceleration, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") 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
void prepare ()
 Prepare all discretization and assembly data without running a solve.
 
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 &space_args, const mesh::Mesh &mesh, Eigen::VectorXi &disc_orders, Eigen::VectorXi &disc_ordersq)
 
void assign_discr_orders (const json &space_args, const int fe_space_id, const mesh::Mesh &mesh, Eigen::VectorXi &disc_orders, Eigen::VectorXi &disc_ordersq)
 
QuadratureOrders n_boundary_samples (const int discr_order, const int discr_orderq, const int gdiscr_order) const
 
void build_fe_space (mesh::Mesh &mesh, const bool iso_parametric, const Eigen::VectorXi &disc_orders, const Eigen::VectorXi &disc_ordersq, 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)
 
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
 
bool save_timestep_to_vtm (const double time, const int t, const double dt, const Eigen::MatrixXd &solution, paraviewo::VTMWriter &vtm, const std::string &block_prefix) 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
 

Additional Inherited Members

- 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::LinearElasticVarForm
solver::SolveData solve_data_
 
- 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 8 of file DifferentiableLinearElasticVarForm.hpp.

Member Function Documentation

◆ assembly_cache()

const assembler::AssemblyValsCache & polyfem::varform::DifferentiableLinearElasticVarForm::assembly_cache ( ) const
overridevirtual

◆ boundary_samples()

QuadratureOrders polyfem::varform::DifferentiableLinearElasticVarForm::boundary_samples ( int  discr_order,
int  discr_orderq,
int  geometry_discr_order 
) const
overrideprotectedvirtual

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 142 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::n_boundary_samples().

Here is the call graph for this function:

◆ boundary_state()

const VarFormBoundaryState & polyfem::varform::DifferentiableLinearElasticVarForm::boundary_state ( ) const
overridevirtual

◆ get_args() [1/2]

const json & polyfem::varform::DifferentiableLinearElasticVarForm::get_args ( ) const
overridevirtual

◆ get_args() [2/2]

json & polyfem::varform::DifferentiableLinearElasticVarForm::get_args ( )
overridevirtual

◆ get_mesh()

const mesh::Mesh & polyfem::varform::DifferentiableLinearElasticVarForm::get_mesh ( ) const
overridevirtual

◆ get_problem() [1/2]

const assembler::Problem & polyfem::varform::DifferentiableLinearElasticVarForm::get_problem ( ) const
overridevirtual

◆ get_problem() [2/2]

assembler::Problem & polyfem::varform::DifferentiableLinearElasticVarForm::get_problem ( )
overridevirtual

◆ get_root_path()

const std::string & polyfem::varform::DifferentiableLinearElasticVarForm::get_root_path ( ) const
overridevirtual

◆ get_units()

const Units & polyfem::varform::DifferentiableLinearElasticVarForm::get_units ( ) const
overridevirtual

◆ initial_acceleration()

void polyfem::varform::DifferentiableLinearElasticVarForm::initial_acceleration ( Eigen::MatrixXd &  acceleration,
const InitialConditionOverride override = nullptr 
) const
overridevirtual

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 108 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::ElasticVarForm::initial_acceleration().

Here is the call graph for this function:

◆ initial_solution()

void polyfem::varform::DifferentiableLinearElasticVarForm::initial_solution ( Eigen::MatrixXd &  solution,
const InitialConditionOverride override = nullptr 
) const
overridevirtual

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 94 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::ElasticVarForm::initial_solution().

Here is the call graph for this function:

◆ initial_velocity()

void polyfem::varform::DifferentiableLinearElasticVarForm::initial_velocity ( Eigen::MatrixXd &  velocity,
const InitialConditionOverride override = nullptr 
) const
overridevirtual

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 101 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::ElasticVarForm::initial_velocity().

Here is the call graph for this function:

◆ input_path()

std::string polyfem::varform::DifferentiableLinearElasticVarForm::input_path ( const std::string &  path,
bool  only_if_exists = false 
) const
overridevirtual

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 60 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::resolve_input_path().

Here is the call graph for this function:

◆ invalidate_after_geometry_update()

◆ invalidate_after_parameter_update()

◆ is_contact_enabled()

bool polyfem::varform::DifferentiableLinearElasticVarForm::is_contact_enabled ( ) const
overridevirtual

Check if contact is enabled for the variational formulation, for output purposes.

Returns
True if contact is enabled, false otherwise

Reimplemented from polyfem::varform::VarForm.

Definition at line 71 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::is_contact_enabled().

Here is the call graph for this function:

◆ mass_assembler()

const assembler::Mass & polyfem::varform::DifferentiableLinearElasticVarForm::mass_assembler ( ) const
overridevirtual

◆ mass_assembly_cache()

const assembler::AssemblyValsCache & polyfem::varform::DifferentiableLinearElasticVarForm::mass_assembly_cache ( ) const
overridevirtual

◆ mass_matrix()

const StiffnessMatrix & polyfem::varform::DifferentiableLinearElasticVarForm::mass_matrix ( ) const
overridevirtual

◆ mutable_mesh()

mesh::Mesh & polyfem::varform::DifferentiableLinearElasticVarForm::mutable_mesh ( )
overrideprotectedvirtual

◆ name()

std::string polyfem::varform::DifferentiableLinearElasticVarForm::name ( ) const
overridevirtual

Get the name of the variational formulation.

Returns
Name of the variational formulation

Implements polyfem::varform::VarForm.

Definition at line 5 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::LinearElasticVarForm::name().

Here is the call graph for this function:

◆ output_file_path()

std::string polyfem::varform::DifferentiableLinearElasticVarForm::output_file_path ( const std::string &  path) const
overridevirtual

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 65 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::resolve_output_path().

Here is the call graph for this function:

◆ prepare()

void polyfem::varform::DifferentiableLinearElasticVarForm::prepare ( )
overridevirtual

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 19 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::prepare().

Here is the call graph for this function:

◆ primary_assembler()

const assembler::Assembler & polyfem::varform::DifferentiableLinearElasticVarForm::primary_assembler ( ) const
overridevirtual

◆ primary_space()

const FESpace & polyfem::varform::DifferentiableLinearElasticVarForm::primary_space ( ) const
overridevirtual

◆ save_vtu()

void polyfem::varform::DifferentiableLinearElasticVarForm::save_vtu ( const std::string &  path,
const Eigen::MatrixXd &  solution,
double  time,
double  dt 
) const
overridevirtual

◆ solve()

void polyfem::varform::DifferentiableLinearElasticVarForm::solve ( Eigen::MatrixXd &  solution,
const InitialConditionOverride initial_condition_override,
const ForwardStepCallback post_step,
bool  differentiable 
)
overridevirtual

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 10 of file DifferentiableLinearElasticVarForm.cpp.

References polyfem::varform::VarForm::solve().

Here is the call graph for this function:

◆ solve_data() [1/2]

const solver::SolveData * polyfem::varform::DifferentiableLinearElasticVarForm::solve_data ( ) const
overridevirtual

◆ solve_data() [2/2]

solver::SolveData * polyfem::varform::DifferentiableLinearElasticVarForm::solve_data ( )
overridevirtual

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