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

#include <DifferentiableNonlinearElasticVarForm.hpp>

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

Public Member Functions

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
 
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, 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 std::string name () const =0
 
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
 
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)
 
virtual void solve_problem (Eigen::MatrixXd &sol, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step)=0
 
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
 

Private Attributes

bool differentiable_mode_ = false
 
assembler::MacroStrainValue macro_strain_constraint_
 
Eigen::MatrixXd displacement_gradient_
 

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)
 
- 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 9 of file DifferentiableNonlinearElasticVarForm.hpp.

Member Function Documentation

◆ assembly_cache()

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

◆ boundary_samples()

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

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 181 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ boundary_state()

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

◆ collision_mesh()

const ipc::CollisionMesh & polyfem::varform::DifferentiableNonlinearElasticVarForm::collision_mesh ( ) const
overridevirtual

◆ damping_assembler()

const assembler::ViscousDamping * polyfem::varform::DifferentiableNonlinearElasticVarForm::damping_assembler ( ) const
overridevirtual

◆ damping_prev_assembler()

const assembler::ViscousDampingPrev * polyfem::varform::DifferentiableNonlinearElasticVarForm::damping_prev_assembler ( ) const
overridevirtual

◆ displacement_gradient()

Eigen::MatrixXd polyfem::varform::DifferentiableNonlinearElasticVarForm::displacement_gradient ( ) const
overridevirtual

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 141 of file DifferentiableNonlinearElasticVarForm.cpp.

References polyfem::varform::DifferentiableVarForm::displacement_gradient(), and displacement_gradient_.

Here is the call graph for this function:

◆ get_args() [1/2]

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

◆ get_args() [2/2]

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

◆ get_mesh()

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

◆ get_obstacle()

const mesh::Obstacle & polyfem::varform::DifferentiableNonlinearElasticVarForm::get_obstacle ( ) const
overridevirtual

◆ get_problem() [1/2]

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

◆ get_problem() [2/2]

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

◆ get_root_path()

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

◆ get_units()

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

◆ init_forms()

void polyfem::varform::DifferentiableNonlinearElasticVarForm::init_forms ( const json args,
int  dim,
Eigen::MatrixXd &  solution,
double  time 
)
overrideprotectedvirtual

Reimplemented from polyfem::varform::NonlinearElasticVarForm.

Definition at line 191 of file DifferentiableNonlinearElasticVarForm.cpp.

References polyfem::varform::VarForm::args, polyfem::varform::ElasticVarForm::ass_vals_cache_, polyfem::varform::ElasticVarForm::avg_mass_, polyfem::varform::FESpace::bases, polyfem::varform::ElasticVarForm::boundary_, polyfem::varform::VarFormBoundaryState::boundary_nodes, polyfem::varform::NonlinearElasticVarForm::build_pressure_assembler(), polyfem::varform::NonlinearElasticVarForm::collision_mesh_, polyfem::solver::SolveData::contact_form, polyfem::varform::NonlinearElasticVarForm::damping_assembler_, polyfem::varform::NonlinearElasticVarForm::damping_prev_assembler_, differentiable_mode_, polyfem::varform::ElasticVarForm::elastic_boundary_samples(), polyfem::varform::NonlinearElasticVarForm::elasticity_pressure_assembler, polyfem::varform::NonlinearElasticVarForm::forms, polyfem::varform::FESpace::geometry_basis_list(), polyfem::varform::NonlinearElasticVarForm::init_forms(), polyfem::solver::SolveData::init_forms(), polyfem::varform::VarFormBoundaryState::local_boundary, polyfem::varform::VarFormBoundaryState::local_neumann_boundary, polyfem::varform::VarFormBoundaryState::local_pressure_boundary, polyfem::varform::VarFormBoundaryState::local_pressure_cavity, macro_strain_constraint_, polyfem::varform::ElasticVarForm::mass_, polyfem::varform::ElasticVarForm::mass_ass_vals_cache_, polyfem::varform::ElasticVarForm::mass_assembler_, polyfem::varform::VarForm::mesh_, polyfem::varform::FESpace::n_bases, polyfem::mesh::Obstacle::ndof(), polyfem::varform::NonlinearElasticVarForm::obstacle, polyfem::varform::VarForm::output_path, polyfem::varform::NonlinearElasticVarForm::periodic_collision_mesh_, polyfem::varform::NonlinearElasticVarForm::periodic_collision_mesh_to_basis_, polyfem::varform::ElasticVarForm::primary_assembler_, polyfem::varform::ElasticVarForm::rhs_, polyfem::varform::VarForm::set_materials(), polyfem::varform::NonlinearElasticVarForm::solve_data_, polyfem::varform::ElasticVarForm::space_, polyfem::varform::FESpace::space_in_node_to_node, polyfem::varform::VarFormBoundaryState::total_local_boundary, and polyfem::varform::VarForm::units.

Here is the call graph for this function:

◆ init_homogenization_solve()

void polyfem::varform::DifferentiableNonlinearElasticVarForm::init_homogenization_solve ( Eigen::MatrixXd &  solution,
double  time,
const InitialConditionOverride initial_condition_override 
)
protected

◆ initial_acceleration()

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

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 134 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ initial_solution()

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

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 120 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Referenced by solve_homogenization_step(), polyfem::varform::DifferentiableNonlinearElasticStaticVarForm::solve_problem(), and polyfem::varform::DifferentiableNonlinearElasticTransientVarForm::solve_problem().

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

◆ initial_velocity()

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

Reimplemented from polyfem::varform::DifferentiableVarForm.

Definition at line 127 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ input_path()

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

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 74 of file DifferentiableNonlinearElasticVarForm.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::DifferentiableNonlinearElasticVarForm::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 85 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ mass_assembler()

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

◆ mass_assembly_cache()

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

◆ mass_matrix()

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

◆ mutable_mesh()

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

◆ output_file_path()

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

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 79 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ prepare()

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

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 33 of file DifferentiableNonlinearElasticVarForm.cpp.

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

Here is the call graph for this function:

◆ primary_assembler()

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

◆ primary_space()

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

◆ save_vtu()

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

◆ solve()

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

Implements polyfem::varform::DifferentiableVarForm.

Definition at line 23 of file DifferentiableNonlinearElasticVarForm.cpp.

References differentiable_mode_, and polyfem::varform::VarForm::solve().

Here is the call graph for this function:

◆ solve_data() [1/2]

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

◆ solve_data() [2/2]

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

◆ solve_homogenization_step()

void polyfem::varform::DifferentiableNonlinearElasticVarForm::solve_homogenization_step ( Eigen::MatrixXd &  solution,
const ForwardStepCallback post_step 
)
protected

◆ solve_tensor_nonlinear()

void polyfem::varform::DifferentiableNonlinearElasticVarForm::solve_tensor_nonlinear ( int  step,
Eigen::MatrixXd &  solution,
bool  init_lagging = true 
)
overrideprotectedvirtual

Reimplemented from polyfem::varform::NonlinearElasticVarForm.

Definition at line 271 of file DifferentiableNonlinearElasticVarForm.cpp.

References polyfem::solver::SolveData::al_form, polyfem::varform::VarForm::args, polyfem::varform::FESpace::basis_list(), polyfem::Units::characteristic_length(), polyfem::utils::count_invalid(), differentiable_mode_, polyfem::varform::FESpace::geometry_basis_list(), polyfem::solver::NLProblem::init_lagging(), polyfem::logger(), polyfem::varform::VarForm::mesh_, polyfem::solver::SolveData::nl_problem, POLYFEM_SCOPED_TIMER, polyfem::solver::ALSolver::post_subsolve, polyfem::varform::ElasticVarForm::rhs_, polyfem::varform::VarForm::save_subsolve(), polyfem::solver::ALSolver::solve_al(), polyfem::varform::NonlinearElasticVarForm::solve_data_, polyfem::solver::ALSolver::solve_reduced(), polyfem::varform::NonlinearElasticVarForm::solve_tensor_nonlinear(), polyfem::io::OutStatsData::solver_info, polyfem::varform::ElasticVarForm::space_, polyfem::varform::VarForm::stats, polyfem::varform::VarForm::units, and polyfem::solver::FullNLProblem::uses_lagging().

Referenced by polyfem::varform::DifferentiableNonlinearElasticStaticVarForm::solve_problem(), and polyfem::varform::DifferentiableNonlinearElasticTransientVarForm::solve_problem().

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

Member Data Documentation

◆ differentiable_mode_

bool polyfem::varform::DifferentiableNonlinearElasticVarForm::differentiable_mode_ = false
private

◆ displacement_gradient_

Eigen::MatrixXd polyfem::varform::DifferentiableNonlinearElasticVarForm::displacement_gradient_
private

◆ macro_strain_constraint_

assembler::MacroStrainValue polyfem::varform::DifferentiableNonlinearElasticVarForm::macro_strain_constraint_
private

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