|
PolyFEM
|
#include <DifferentiableNonlinearElasticVarForm.hpp>
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 |
| json & | get_args () override |
| const json & | get_args () const override |
| const mesh::Mesh & | get_mesh () const override |
| assembler::Problem & | get_problem () override |
| const assembler::Problem & | get_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 Units & | get_units () const override |
| bool | is_contact_enabled () const override |
| Check if contact is enabled for the variational formulation, for output purposes. | |
| const FESpace & | primary_space () const override |
| const VarFormBoundaryState & | boundary_state () const override |
| const assembler::Assembler & | primary_assembler () const override |
| const assembler::Mass & | mass_assembler () const override |
| const assembler::AssemblyValsCache & | assembly_cache () const override |
| const assembler::AssemblyValsCache & | mass_assembly_cache () const override |
| const StiffnessMatrix & | mass_matrix () const override |
| solver::SolveData * | solve_data () override |
| const solver::SolveData * | solve_data () const override |
| const ipc::CollisionMesh & | collision_mesh () const override |
| const mesh::Obstacle & | get_obstacle () const override |
| const assembler::ViscousDamping * | damping_assembler () const override |
| const assembler::ViscousDampingPrev * | damping_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::OutputField > | output_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 StiffnessMatrix & | embedding_norm_matrix () const |
| const std::shared_ptr< time_integrator::ImplicitTimeIntegrator > & | embedding_time_integrator () const |
| const FESpace & | embedding_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::OutRuntimeData & | output_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::Mesh & | mutable_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::PressureAssembler > | build_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::OutputField > | elastic_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::PressureAssembler > | elasticity_pressure_assembler = nullptr |
| std::shared_ptr< assembler::ViscousDamping > | damping_assembler_ = nullptr |
| std::shared_ptr< assembler::ViscousDampingPrev > | damping_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::RhsAssembler > | rhs_assembler_ |
| StiffnessMatrix | mass_ |
| StiffnessMatrix | pure_mass_ |
| double | avg_mass_ = 0 |
| Eigen::MatrixXd | rhs_ |
| std::shared_ptr< assembler::Assembler > | primary_assembler_ = nullptr |
| std::shared_ptr< assembler::Mass > | mass_assembler_ = nullptr |
| std::shared_ptr< assembler::HRZMass > | pure_mass_assembler_ = nullptr |
| double | t0 = 0 |
| int | time_steps = 0 |
| double | dt = 0 |
Protected Attributes inherited from polyfem::varform::VarForm | |
| std::shared_ptr< assembler::Problem > | problem |
| 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::Mesh > | mesh_ |
| std::function< void(int, int, double, double)> | time_callback |
| io::OutGeometryData | output_geometry_ |
| bool | output_sampler_initialized_ = false |
| bool | prepared_ = false |
Definition at line 82 of file DifferentiableNonlinearElasticVarForm.hpp.
|
inlineoverridevirtual |
Get the name of the variational formulation.
Implements polyfem::varform::VarForm.
Definition at line 85 of file DifferentiableNonlinearElasticVarForm.hpp.
|
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().