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

#include <DifferentiableNonlinearElasticVarForm.hpp>

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

Public Member Functions

std::string name () const override
 Get the name of the variational formulation.
 
- Public Member Functions inherited from polyfem::varform::DifferentiableNonlinearElasticVarForm
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
 
const ipc::CollisionMesh & collision_mesh () const override
 
const mesh::Obstacleget_obstacle () const override
 
const assembler::ViscousDampingdamping_assembler () const override
 
const assembler::ViscousDampingPrevdamping_prev_assembler () 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
 
Eigen::MatrixXd displacement_gradient () const override
 
- Public Member Functions inherited from polyfem::varform::NonlinearElasticVarForm
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.
 
void prepare_for_embedding ()
 Prepare the standard nonlinear-elastic assembly state for use as a block in a larger nonlinear problem.
 
void initial_solution_for_embedding (Eigen::MatrixXd &solution, const std::string &state_prefix="") const
 
void init_forms_for_embedding (Eigen::MatrixXd &solution, double t, const std::string &state_prefix="")
 
void advance_for_embedding (const Eigen::VectorXd &solution)
 
void update_barrier_stiffness_for_embedding (const Eigen::VectorXd &solution)
 
bool save_timestep_for_embedding (double time, int step, double dt, const Eigen::MatrixXd &solution, paraviewo::VTMWriter &vtm, const std::string &block_prefix) const
 
int embedding_ndof () const
 
const std::vector< std::shared_ptr< solver::Form > > & embedding_forms () const
 
const std::vector< std::shared_ptr< solver::AugmentedLagrangianForm > > & embedding_al_forms () const
 
const StiffnessMatrixembedding_norm_matrix () const
 
const std::shared_ptr< time_integrator::ImplicitTimeIntegrator > & embedding_time_integrator () const
 
const FESpaceembedding_space () const
 
- 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
 
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
 
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)
 

Private Member Functions

void solve_problem (Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
 

Additional Inherited Members

- Static Public Member Functions inherited from polyfem::varform::NonlinearElasticVarForm
static 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)
 
- Protected Member Functions inherited from polyfem::varform::DifferentiableNonlinearElasticVarForm
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
 
void init_forms (const json &args, int dim, Eigen::MatrixXd &solution, double time) override
 
void solve_tensor_nonlinear (int step, Eigen::MatrixXd &solution, bool init_lagging=true) override
 
void init_homogenization_solve (Eigen::MatrixXd &solution, double time, const InitialConditionOverride *initial_condition_override)
 
void solve_homogenization_step (Eigen::MatrixXd &solution, const ForwardStepCallback &post_step)
 
- Protected Member Functions inherited from polyfem::varform::NonlinearElasticVarForm
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, double t, const InitialConditionOverride *initial_condition_override)
 
void init_solve_data (Eigen::MatrixXd &sol, double t, const std::string &state_prefix, const InitialConditionOverride *initial_condition_override=nullptr)
 
std::shared_ptr< assembler::PressureAssemblerbuild_pressure_assembler () const
 
void build_collision_mesh (const mesh::Mesh &mesh, const json &args)
 
void build_periodic_collision_mesh ()
 
void preprocess_contact_parameters ()
 
int n_obstacle_vertices () const override
 
- Protected Member Functions inherited from polyfem::varform::ElasticVarForm
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 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
 
- 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
 
- 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::NonlinearElasticVarForm
ipc::CollisionMesh collision_mesh_
 
ipc::CollisionMesh periodic_collision_mesh_
 
Eigen::VectorXi periodic_collision_mesh_to_basis_
 
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
 

Detailed Description

Definition at line 82 of file DifferentiableNonlinearElasticVarForm.hpp.

Member Function Documentation

◆ name()

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

Get the name of the variational formulation.

Returns
Name of the variational formulation

Implements polyfem::varform::VarForm.

Definition at line 85 of file DifferentiableNonlinearElasticVarForm.hpp.

◆ solve_problem()

void polyfem::varform::DifferentiableNonlinearElasticTransientVarForm::solve_problem ( Eigen::MatrixXd &  solution,
const InitialConditionOverride initial_condition_override,
const ForwardStepCallback post_step 
)
overrideprivatevirtual

Implements polyfem::varform::VarForm.

Definition at line 543 of file DifferentiableNonlinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::varform::ElasticVarForm::dt, polyfem::varform::NonlinearElasticVarForm::init_solve(), polyfem::varform::DifferentiableNonlinearElasticVarForm::initial_solution(), polyfem::logger(), polyfem::io::OutputSpace::mesh, polyfem::varform::FESpace::n_bases, polyfem::mesh::Mesh::n_elements(), polyfem::solver::SolveData::nl_problem, polyfem::varform::VarForm::notify_time_step(), polyfem::varform::NonlinearElasticVarForm::output_space(), POLYFEM_SCOPED_TIMER, polyfem::varform::ElasticVarForm::primary_assembler_, polyfem::varform::VarForm::resolve_output_path(), polyfem::varform::ElasticVarForm::save_elastic_step_state(), polyfem::varform::VarForm::save_timestep(), polyfem::varform::InitialConditionOverride::solution, polyfem::varform::NonlinearElasticVarForm::solve_data_, polyfem::varform::DifferentiableNonlinearElasticVarForm::solve_tensor_nonlinear(), polyfem::io::OutRuntimeData::solving_time, polyfem::varform::ElasticVarForm::space_, polyfem::io::OutStatsData::spectrum, polyfem::varform::VarForm::stats, polyfem::varform::ElasticVarForm::t0, polyfem::solver::SolveData::time_integrator, polyfem::varform::ElasticVarForm::time_steps, polyfem::varform::VarForm::timings, polyfem::solver::SolveData::update_barrier_stiffness(), and polyfem::solver::SolveData::update_dt().

Here is the call graph for this function:

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