|
PolyFEM
|
#include <GenericProblem.hpp>
Public Member Functions | |
| GenericTensorProblem (const std::string &name) | |
| void | set_units (const assembler::Assembler &assembler, const Units &units) override |
| void | rhs (const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | rhs (const assembler::Assembler &assembler, const mesh::Mesh &mesh, const int element_id, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| bool | is_rhs_zero (const int fe_space_id=-1) const override |
| void | dirichlet_bc (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | neumann_bc (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const Eigen::MatrixXd &normals, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | pressure_bc (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const Eigen::MatrixXd &normals, const double t, Eigen::MatrixXd &val) const override |
| double | pressure_cavity_bc (const int boundary_id, const double t) const override |
| void | dirichlet_nodal_value (const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | neumann_nodal_value (const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const Eigen::MatrixXd &normal, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| bool | is_nodal_dirichlet_boundary (const int n_id, const int tag, const int fe_space_id=-1) override |
| bool | is_nodal_neumann_boundary (const int n_id, const int tag, const int fe_space_id=-1) override |
| bool | has_nodal_dirichlet (const int fe_space_id=-1) override |
| bool | has_nodal_neumann (const int fe_space_id=-1) override |
| bool | is_nodal_dimension_dirichlet (const int n_id, const int tag, const int dim, const int fe_space_id=-1) const override |
| void | update_nodes (const Eigen::VectorXi &in_node_to_node) override |
| bool | has_exact_sol () const override |
| bool | is_scalar () const override |
| bool | is_time_dependent () const override |
| void | set_time_dependent (const bool val) |
| bool | is_constant_in_time () const override |
| bool | might_have_no_dirichlet () override |
| void | initial_solution (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | initial_velocity (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | initial_acceleration (const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override |
| void | set_parameters (const json ¶ms, const std::string &root_path) override |
| bool | is_dimension_dirichet (const int tag, const int dim, const int fe_space_id=-1) const override |
| bool | all_dimensions_dirichlet (const int fe_space_id) const override |
| void | exact (const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override |
| void | exact_grad (const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override |
| void | clear () override |
| void | update_dirichlet_boundary (const int id, const int time_step, const Eigen::VectorXd &val) |
| void | update_dirichlet_nodes (const Eigen::VectorXi &in_node_to_node, const Eigen::VectorXi &node_ids, const Eigen::MatrixXd &nodal_dirichlet) |
| void | update_pressure_boundary (const int id, const int time_step, const double val) |
Public Member Functions inherited from polyfem::assembler::Problem | |
| Problem (const std::string &name) | |
| virtual | ~Problem () |
| virtual void | init (const mesh::Mesh &mesh) |
| const std::string & | name () const |
| virtual bool | is_boundary_pressure (const int boundary_id) const |
| virtual void | initial_density (const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const |
| void | setup_bc (const mesh::Mesh &mesh, const BoundaryKind kind, const int fe_space_id, const std::vector< basis::ElementBases > &bases, const std::vector< mesh::LocalBoundary > &local_boundary, std::vector< mesh::LocalBoundary > &selected_local_boundary, std::vector< int > &boundary_nodes, const int value_dim=-1) |
| void | setup_pressure_cavity_bc (const mesh::Mesh &mesh, const int fe_space_id, const std::vector< mesh::LocalBoundary > &local_boundary, std::unordered_map< int, std::vector< mesh::LocalBoundary > > &local_pressure_cavity) |
| void | setup_nodal_bc (const mesh::Mesh &mesh, const BoundaryKind kind, const int fe_space_id, const int n_bases, std::vector< int > &nodes) |
| void | setup_bc (const mesh::Mesh &mesh, const int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &geom_bases, const std::vector< basis::ElementBases > &pressure_bases, std::vector< mesh::LocalBoundary > &local_boundary, std::vector< int > &boundary_nodes, std::vector< mesh::LocalBoundary > &local_neumann_boundary, std::vector< mesh::LocalBoundary > &local_pressure_boundary, std::unordered_map< int, std::vector< mesh::LocalBoundary > > &local_pressure_cavity, std::vector< int > &pressure_boundary_nodes, std::vector< int > &dirichlet_nodes, std::vector< int > &neumann_nodes) |
Protected Member Functions | |
| bool | has_boundary (const BoundaryKind kind, const int tag, const int fe_space_id) override |
Private Attributes | |
| bool | has_exact_ = false |
| bool | has_exact_grad_ = false |
| bool | is_time_dept_ = false |
| std::vector< TensorBCValue > | forces_ |
| std::vector< TensorBCValue > | displacements_ |
| std::vector< ScalarBCValue > | normal_aligned_forces_ |
| std::vector< ScalarBCValue > | pressures_ |
| std::unordered_map< int, ScalarBCValue > | cavity_pressures_ |
| std::vector< TensorInitialValue > | initial_position_ |
| std::vector< TensorInitialValue > | initial_velocity_ |
| std::vector< TensorInitialValue > | initial_acceleration_ |
| std::map< int, std::array< utils::ExpressionValue, 3 > > | rhs_ |
| std::map< int, int > | rhs_size_ |
| std::vector< TensorInitialValue > | body_rhs_ |
| std::array< utils::ExpressionValue, 3 > | exact_ |
| std::array< utils::ExpressionValue, 9 > | exact_grad_ |
| std::map< int, TensorBCValue > | nodal_dirichlet_ |
| std::map< int, TensorBCValue > | nodal_neumann_ |
| std::vector< Eigen::MatrixXd > | nodal_dirichlet_mat_ |
| std::vector< Eigen::MatrixXd > | nodal_neumann_mat_ |
| bool | is_all_ |
Additional Inherited Members | |
Protected Attributes inherited from polyfem::assembler::Problem | |
| std::vector< int > | boundary_ids_ |
| std::vector< int > | neumann_boundary_ids_ |
| std::vector< int > | normal_aligned_neumann_boundary_ids_ |
| std::vector< int > | pressure_boundary_ids_ |
| std::vector< int > | pressure_cavity_ids_ |
| std::vector< int > | splitting_pressure_boundary_ids_ |
| bool | updated_dirichlet_node_ordering_ = false |
| std::string | name_ |
Definition at line 57 of file GenericProblem.hpp.
| polyfem::assembler::GenericTensorProblem::GenericTensorProblem | ( | const std::string & | name | ) |
Definition at line 124 of file GenericProblem.cpp.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 354 of file GenericProblem.cpp.
References displacements_, and nodal_dirichlet_mat_.
Referenced by is_dimension_dirichet().
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 1179 of file GenericProblem.cpp.
References body_rhs_, cavity_pressures_, clear(), displacements_, exact_, exact_grad_, forces_, has_exact_, has_exact_grad_, initial_acceleration_, initial_position_, initial_velocity_, is_all_, is_time_dept_, nodal_dirichlet_, nodal_dirichlet_mat_, nodal_neumann_, nodal_neumann_mat_, normal_aligned_forces_, pressures_, rhs_, rhs_size_, and polyfem::assembler::Problem::updated_dirichlet_node_ordering_.
Referenced by clear().
|
overridevirtual |
Implements polyfem::assembler::Problem.
Definition at line 383 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, polyfem::mesh::Mesh::dimension(), displacements_, polyfem::mesh::Mesh::get_boundary_id(), and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 508 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, polyfem::mesh::Mesh::dimension(), displacements_, polyfem::mesh::Mesh::get_node_id(), nodal_dirichlet_mat_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 474 of file GenericProblem.cpp.
References exact_, has_exact_sol(), val, x, y, and z.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 490 of file GenericProblem.cpp.
References exact_grad_, has_exact_grad_, val, x, y, and z.
|
overrideprotectedvirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 314 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, polyfem::assembler::Dirichlet, displacements_, forces_, polyfem::assembler::Problem::neumann_boundary_ids_, normal_aligned_forces_, and polyfem::assembler::Problem::normal_aligned_neumann_boundary_ids_.
|
inlineoverridevirtual |
Implements polyfem::assembler::Problem.
Definition at line 81 of file GenericProblem.hpp.
References has_exact_.
Referenced by exact().
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 608 of file GenericProblem.cpp.
References nodal_dirichlet_mat_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 613 of file GenericProblem.cpp.
References nodal_neumann_, and nodal_neumann_mat_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 1139 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::get_body_id(), initial_acceleration_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 1059 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::get_body_id(), initial_position_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 1099 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::get_body_id(), initial_velocity_, and val.
|
inlineoverridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 85 of file GenericProblem.hpp.
References is_time_dept_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 336 of file GenericProblem.cpp.
References all_dimensions_dirichlet(), polyfem::assembler::Problem::boundary_ids_, and displacements_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 627 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, displacements_, and nodal_dirichlet_mat_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 573 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, displacements_, and nodal_dirichlet_mat_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 591 of file GenericProblem.cpp.
References nodal_neumann_, and nodal_neumann_mat_.
|
overridevirtual |
Implements polyfem::assembler::Problem.
Definition at line 291 of file GenericProblem.cpp.
References body_rhs_, rhs(), rhs_, and rhs_size_.
Referenced by rhs().
|
inlineoverridevirtual |
Implements polyfem::assembler::Problem.
Definition at line 82 of file GenericProblem.hpp.
|
inlineoverridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 83 of file GenericProblem.hpp.
References is_time_dept_.
|
inlineoverridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 86 of file GenericProblem.hpp.
References is_all_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 413 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::dimension(), forces_, polyfem::mesh::Mesh::get_boundary_id(), polyfem::assembler::Problem::neumann_boundary_ids_, normal_aligned_forces_, polyfem::assembler::Problem::normal_aligned_neumann_boundary_ids_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 543 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::dimension(), polyfem::mesh::Mesh::get_node_id(), nodal_neumann_, nodal_neumann_mat_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 448 of file GenericProblem.cpp.
References polyfem::mesh::Mesh::get_boundary_id(), polyfem::assembler::Problem::pressure_boundary_ids_, pressures_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 467 of file GenericProblem.cpp.
References cavity_pressures_.
|
overridevirtual |
Implements polyfem::assembler::Problem.
Definition at line 221 of file GenericProblem.cpp.
References is_rhs_zero(), rhs(), rhs_, rhs_size_, val, x, y, and z.
Referenced by is_rhs_zero(), rhs(), rhs(), and set_units().
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 245 of file GenericProblem.cpp.
References body_rhs_, polyfem::mesh::Mesh::get_body_id(), rhs(), val, polyfem::assembler::TensorInitialValue::value, x, y, and z.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 675 of file GenericProblem.cpp.
References body_rhs_, polyfem::assembler::Problem::boundary_ids_, polyfem::utils::Interpolation::build(), cavity_pressures_, displacements_, entries, exact_, exact_grad_, polyfem::assembler::TensorBCValue::fe_space_id, forces_, has_exact_, has_exact_grad_, polyfem::assembler::Problem::init(), initial_acceleration_, initial_position_, initial_velocity_, polyfem::assembler::TensorBCValue::interpolation, is_all_, polyfem::utils::is_param_valid(), is_time_dept_, polyfem::log_and_throw_error(), polyfem::assembler::Problem::neumann_boundary_ids_, nodal_dirichlet_, nodal_dirichlet_mat_, nodal_neumann_, nodal_neumann_mat_, normal_aligned_forces_, polyfem::assembler::Problem::normal_aligned_neumann_boundary_ids_, polyfem::assembler::Problem::pressure_boundary_ids_, polyfem::assembler::Problem::pressure_cavity_ids_, pressures_, polyfem::io::read_matrix(), polyfem::utils::resolve_path(), rhs_, rhs_size_, polyfem::assembler::TensorBCValue::size, and polyfem::assembler::TensorBCValue::value.
|
inline |
Definition at line 84 of file GenericProblem.hpp.
References is_time_dept_, and val.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 129 of file GenericProblem.cpp.
References polyfem::Units::acceleration(), cavity_pressures_, displacements_, exact_, exact_grad_, polyfem::Units::force(), forces_, initial_acceleration_, initial_position_, initial_velocity_, polyfem::assembler::Assembler::is_fluid(), polyfem::Units::length(), nodal_dirichlet_, nodal_neumann_, normal_aligned_forces_, polyfem::Units::pressure(), pressures_, rhs(), rhs_, and polyfem::Units::velocity().
| void polyfem::assembler::GenericTensorProblem::update_dirichlet_boundary | ( | const int | id, |
| const int | time_step, | ||
| const Eigen::VectorXd & | val | ||
| ) |
Definition at line 1453 of file GenericProblem.cpp.
References polyfem::assembler::Problem::boundary_ids_, displacements_, and val.
| void polyfem::assembler::GenericTensorProblem::update_dirichlet_nodes | ( | const Eigen::VectorXi & | in_node_to_node, |
| const Eigen::VectorXi & | node_ids, | ||
| const Eigen::MatrixXd & | nodal_dirichlet | ||
| ) |
Definition at line 1486 of file GenericProblem.cpp.
References nodal_dirichlet_mat_.
|
overridevirtual |
Reimplemented from polyfem::assembler::Problem.
Definition at line 648 of file GenericProblem.cpp.
References polyfem::logger(), nodal_dirichlet_mat_, nodal_neumann_mat_, and polyfem::assembler::Problem::updated_dirichlet_node_ordering_.
| void polyfem::assembler::GenericTensorProblem::update_pressure_boundary | ( | const int | id, |
| const int | time_step, | ||
| const double | val | ||
| ) |
Definition at line 1423 of file GenericProblem.cpp.
References polyfem::assembler::Problem::pressure_boundary_ids_, pressures_, and val.
|
private |
Definition at line 124 of file GenericProblem.hpp.
Referenced by clear(), is_rhs_zero(), rhs(), and set_parameters().
|
private |
Definition at line 116 of file GenericProblem.hpp.
Referenced by clear(), pressure_cavity_bc(), set_parameters(), and set_units().
|
private |
Definition at line 113 of file GenericProblem.hpp.
Referenced by all_dimensions_dirichlet(), clear(), dirichlet_bc(), dirichlet_nodal_value(), has_boundary(), is_dimension_dirichet(), is_nodal_dimension_dirichlet(), is_nodal_dirichlet_boundary(), set_parameters(), set_units(), and update_dirichlet_boundary().
|
private |
Definition at line 125 of file GenericProblem.hpp.
Referenced by clear(), exact(), set_parameters(), and set_units().
|
private |
Definition at line 126 of file GenericProblem.hpp.
Referenced by clear(), exact_grad(), set_parameters(), and set_units().
|
private |
Definition at line 112 of file GenericProblem.hpp.
Referenced by clear(), has_boundary(), neumann_bc(), set_parameters(), and set_units().
|
private |
Definition at line 107 of file GenericProblem.hpp.
Referenced by clear(), has_exact_sol(), and set_parameters().
|
private |
Definition at line 108 of file GenericProblem.hpp.
Referenced by clear(), exact_grad(), and set_parameters().
|
private |
Definition at line 120 of file GenericProblem.hpp.
Referenced by clear(), initial_acceleration(), set_parameters(), and set_units().
|
private |
Definition at line 118 of file GenericProblem.hpp.
Referenced by clear(), initial_solution(), set_parameters(), and set_units().
|
private |
Definition at line 119 of file GenericProblem.hpp.
Referenced by clear(), initial_velocity(), set_parameters(), and set_units().
|
private |
Definition at line 133 of file GenericProblem.hpp.
Referenced by clear(), might_have_no_dirichlet(), and set_parameters().
|
private |
Definition at line 109 of file GenericProblem.hpp.
Referenced by clear(), is_constant_in_time(), is_time_dependent(), set_parameters(), and set_time_dependent().
|
private |
Definition at line 128 of file GenericProblem.hpp.
Referenced by clear(), set_parameters(), and set_units().
|
private |
Definition at line 130 of file GenericProblem.hpp.
Referenced by all_dimensions_dirichlet(), clear(), dirichlet_nodal_value(), has_nodal_dirichlet(), is_nodal_dimension_dirichlet(), is_nodal_dirichlet_boundary(), set_parameters(), update_dirichlet_nodes(), and update_nodes().
|
private |
Definition at line 129 of file GenericProblem.hpp.
Referenced by clear(), has_nodal_neumann(), is_nodal_neumann_boundary(), neumann_nodal_value(), set_parameters(), and set_units().
|
private |
Definition at line 131 of file GenericProblem.hpp.
Referenced by clear(), has_nodal_neumann(), is_nodal_neumann_boundary(), neumann_nodal_value(), set_parameters(), and update_nodes().
|
private |
Definition at line 114 of file GenericProblem.hpp.
Referenced by clear(), has_boundary(), neumann_bc(), set_parameters(), and set_units().
|
private |
Definition at line 115 of file GenericProblem.hpp.
Referenced by clear(), pressure_bc(), set_parameters(), set_units(), and update_pressure_boundary().
|
private |
Definition at line 122 of file GenericProblem.hpp.
Referenced by clear(), is_rhs_zero(), rhs(), set_parameters(), and set_units().
|
private |
Definition at line 123 of file GenericProblem.hpp.
Referenced by clear(), is_rhs_zero(), rhs(), and set_parameters().