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

#include <NonlinearElasticVarForm.hpp>

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

Public Member Functions

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.
 
bool is_contact_enabled () const override
 Check if contact is enabled for the variational formulation, for output purposes.
 
io::OutputSpace output_space () const override
 Get the output space of the variational formulation, for output purposes.
 
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 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::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
 
virtual std::string name () const =0
 Get the name of the variational formulation.
 
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.
 
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.
 

Protected Member Functions

void reset () override
 
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_rhs_assembler () override
 
void init_solve (Eigen::MatrixXd &sol, const double t)
 
void init_forms (const json &args, const int dim, Eigen::MatrixXd &sol, const double t)
 
void solve_tensor_nonlinear (int step, Eigen::MatrixXd &sol, const bool init_lagging=true)
 
std::shared_ptr< assembler::PressureAssemblerbuild_pressure_assembler () const
 
void build_collision_mesh (const mesh::Mesh &mesh, const json &args)
 
void preprocess_contact_parameters ()
 
void build_collision_mesh (const mesh::Mesh &mesh, const int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &geom_bases, const std::vector< mesh::LocalBoundary > &total_local_boundary, const mesh::Obstacle &obstacle, const json &args, const std::function< std::string(const std::string &)> &resolve_input_path, const Eigen::VectorXi &in_node_to_node, ipc::CollisionMesh &collision_mesh)
 
int n_obstacle_vertices () const override
 
- Protected Member Functions inherited from polyfem::varform::ElasticVarForm
void assemble_rhs (const mesh::Mesh &mesh) override
 
void assemble_mass_mat (const mesh::Mesh &mesh, const json &args) 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
 
- 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)
 
virtual void solve_problem (Eigen::MatrixXd &sol)=0
 
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
 

Protected Attributes

ipc::CollisionMesh collision_mesh
 
std::shared_ptr< assembler::PressureAssemblerelasticity_pressure_assembler = nullptr
 
std::shared_ptr< assembler::ViscousDampingdamping_assembler = nullptr
 
std::shared_ptr< assembler::ViscousDampingPrevdamping_prev_assembler = nullptr
 
mesh::Obstacle obstacle
 
solver::SolveData solve_data
 
std::vector< std::shared_ptr< solver::Form > > forms
 
bool contact_dhat_was_explicit_ = false
 
- 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
 

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)
 

Detailed Description

Definition at line 15 of file NonlinearElasticVarForm.hpp.

Member Function Documentation

◆ build_basis()

void polyfem::varform::NonlinearElasticVarForm::build_basis ( mesh::Mesh mesh,
const bool  iso_parametric,
const json args 
)
overrideprotectedvirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 220 of file NonlinearElasticVarForm.cpp.

References polyfem::mesh::Mesh::dimension(), polyfem::logger(), and space_.

Here is the call graph for this function:

◆ build_collision_mesh() [1/2]

void polyfem::varform::NonlinearElasticVarForm::build_collision_mesh ( const mesh::Mesh mesh,
const int  n_bases,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  geom_bases,
const std::vector< mesh::LocalBoundary > &  total_local_boundary,
const mesh::Obstacle obstacle,
const json args,
const std::function< std::string(const std::string &)> &  resolve_input_path,
const Eigen::VectorXi &  in_node_to_node,
ipc::CollisionMesh &  collision_mesh 
)
protected

◆ build_collision_mesh() [2/2]

void polyfem::varform::NonlinearElasticVarForm::build_collision_mesh ( const mesh::Mesh mesh,
const json args 
)
protected

Definition at line 297 of file NonlinearElasticVarForm.cpp.

References space_.

◆ build_pressure_assembler()

std::shared_ptr< assembler::PressureAssembler > polyfem::varform::NonlinearElasticVarForm::build_pressure_assembler ( ) const
protected

Definition at line 434 of file NonlinearElasticVarForm.cpp.

References space_.

◆ build_rhs_assembler()

void polyfem::varform::NonlinearElasticVarForm::build_rhs_assembler ( )
overrideprotectedvirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 278 of file NonlinearElasticVarForm.cpp.

References space_.

◆ init()

void polyfem::varform::NonlinearElasticVarForm::init ( const std::string &  formulation,
const Units units,
const json args,
const std::string &  out_path 
)
overridevirtual

Initialize the variational formulation with the given parameters.

Parameters
formulationname of the variational formulation
unitsunit system to use for the formulation
argsjson input arguments, used to initialize the formulation
out_pathoutput path for the formulation, used to save intermediate data

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 47 of file NonlinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, contact_dhat_was_explicit_, polyfem::varform::ElasticVarForm::init(), and polyfem::varform::VarForm::units.

Here is the call graph for this function:

◆ init_forms()

void polyfem::varform::NonlinearElasticVarForm::init_forms ( const json args,
const int  dim,
Eigen::MatrixXd &  sol,
const double  t 
)
protected

Definition at line 573 of file NonlinearElasticVarForm.cpp.

References polyfem::mesh::Obstacle::ndof(), and space_.

Here is the call graph for this function:

◆ init_solve()

void polyfem::varform::NonlinearElasticVarForm::init_solve ( Eigen::MatrixXd &  sol,
const double  t 
)
protected

Definition at line 651 of file NonlinearElasticVarForm.cpp.

References polyfem::log_and_throw_error(), polyfem::logger(), POLYFEM_SCOPED_TIMER, space_, polyfem::utils::unflatten(), and polyfem::io::OBJWriter::write().

Here is the call graph for this function:

◆ is_contact_enabled()

bool polyfem::varform::NonlinearElasticVarForm::is_contact_enabled ( ) const
inlineoverridevirtual

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 20 of file NonlinearElasticVarForm.hpp.

References polyfem::varform::VarForm::args.

Referenced by output_space().

Here is the caller graph for this function:

◆ load_mesh()

void polyfem::varform::NonlinearElasticVarForm::load_mesh ( const mesh::Mesh mesh,
const json args 
)
overrideprotectedvirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 69 of file NonlinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::mesh::Mesh::dimension(), polyfem::utils::json_as_array(), polyfem::varform::ElasticVarForm::load_mesh(), polyfem::logger(), obstacle, polyfem::mesh::read_obstacle_geometry(), polyfem::varform::VarForm::root_path, and polyfem::varform::VarForm::units.

Here is the call graph for this function:

◆ n_obstacle_vertices()

int polyfem::varform::NonlinearElasticVarForm::n_obstacle_vertices ( ) const
inlineoverrideprotectedvirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 66 of file NonlinearElasticVarForm.hpp.

References polyfem::mesh::Obstacle::n_vertices(), and obstacle.

Here is the call graph for this function:

◆ output_fields()

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

◆ output_space()

io::OutputSpace polyfem::varform::NonlinearElasticVarForm::output_space ( ) const
overridevirtual

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

Returns
Output space

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 82 of file NonlinearElasticVarForm.cpp.

References collision_mesh, is_contact_enabled(), obstacle, and polyfem::varform::ElasticVarForm::output_space().

Here is the call graph for this function:

◆ preprocess_contact_parameters()

void polyfem::varform::NonlinearElasticVarForm::preprocess_contact_parameters ( )
protected

Definition at line 247 of file NonlinearElasticVarForm.cpp.

References polyfem::Units::convert(), and polyfem::logger().

Here is the call graph for this function:

◆ reset()

void polyfem::varform::NonlinearElasticVarForm::reset ( )
overrideprotectedvirtual

Reimplemented from polyfem::varform::ElasticVarForm.

Definition at line 56 of file NonlinearElasticVarForm.cpp.

References polyfem::mesh::Obstacle::clear(), collision_mesh, contact_dhat_was_explicit_, damping_assembler, damping_prev_assembler, elasticity_pressure_assembler, forms, obstacle, polyfem::varform::ElasticVarForm::reset(), and solve_data.

Here is the call graph for this function:

◆ solve_tensor_nonlinear()

Member Data Documentation

◆ collision_mesh

ipc::CollisionMesh polyfem::varform::NonlinearElasticVarForm::collision_mesh
protected

Definition at line 55 of file NonlinearElasticVarForm.hpp.

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

◆ contact_dhat_was_explicit_

bool polyfem::varform::NonlinearElasticVarForm::contact_dhat_was_explicit_ = false
protected

Definition at line 64 of file NonlinearElasticVarForm.hpp.

Referenced by init(), and reset().

◆ damping_assembler

std::shared_ptr<assembler::ViscousDamping> polyfem::varform::NonlinearElasticVarForm::damping_assembler = nullptr
protected

Definition at line 57 of file NonlinearElasticVarForm.hpp.

Referenced by reset().

◆ damping_prev_assembler

std::shared_ptr<assembler::ViscousDampingPrev> polyfem::varform::NonlinearElasticVarForm::damping_prev_assembler = nullptr
protected

Definition at line 58 of file NonlinearElasticVarForm.hpp.

Referenced by reset().

◆ elasticity_pressure_assembler

std::shared_ptr<assembler::PressureAssembler> polyfem::varform::NonlinearElasticVarForm::elasticity_pressure_assembler = nullptr
protected

Definition at line 56 of file NonlinearElasticVarForm.hpp.

Referenced by reset().

◆ forms

std::vector<std::shared_ptr<solver::Form> > polyfem::varform::NonlinearElasticVarForm::forms
protected

Definition at line 63 of file NonlinearElasticVarForm.hpp.

Referenced by reset().

◆ obstacle

mesh::Obstacle polyfem::varform::NonlinearElasticVarForm::obstacle
protected

◆ solve_data

solver::SolveData polyfem::varform::NonlinearElasticVarForm::solve_data
protected

Definition at line 62 of file NonlinearElasticVarForm.hpp.

Referenced by output_fields(), and reset().


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