PolyFEM
Loading...
Searching...
No Matches
polyfem::assembler::Assembler Class Referenceabstract

abstract class More...

#include <Assembler.hpp>

Inheritance diagram for polyfem::assembler::Assembler:
[legend]

Public Types

typedef std::pair< std::string, Eigen::MatrixXd > NamedMatrix
 
typedef std::function< double(const RowVectorNd &, const RowVectorNd &, double, int)> ParamFunc
 

Public Member Functions

virtual ~Assembler ()=default
 
virtual std::string name () const =0
 
int size () const
 
virtual void set_size (const int size)
 
virtual void assemble (const bool is_volume, const int n_basis, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, StiffnessMatrix &stiffness, const bool is_mass=false) const
 
virtual double assemble_energy (const bool is_volume, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev) const
 
virtual Eigen::VectorXd assemble_energy_per_element (const bool is_volume, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev) const
 
virtual void assemble_gradient (const bool is_volume, const int n_basis, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev, Eigen::MatrixXd &rhs) const
 
virtual void assemble_hessian (const bool is_volume, const int n_basis, const bool project_to_psd, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const double dt, const Eigen::MatrixXd &displacement, const Eigen::MatrixXd &displacement_prev, utils::MatrixCache &mat_cache, StiffnessMatrix &grad) const
 
virtual void compute_scalar_value (const OutputData &data, std::vector< NamedMatrix > &result) const
 
virtual void compute_tensor_value (const OutputData &data, std::vector< NamedMatrix > &result) const
 
virtual void compute_stiffness_value (const double t, const assembler::ElementAssemblyValues &vals, const Eigen::MatrixXd &local_pts, const Eigen::MatrixXd &displacement, Eigen::MatrixXd &tensor) const
 
virtual void compute_dstress_dmu_dlambda (const OptAssemblerData &data, Eigen::MatrixXd &dstress_dmu, Eigen::MatrixXd &dstress_dlambda) const
 
virtual void compute_stress_grad_multiply_mat (const OptAssemblerData &data, const Eigen::MatrixXd &mat, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const
 
virtual void compute_stress_grad_multiply_stress (const OptAssemblerData &data, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const
 
virtual void compute_stress_grad_multiply_vect (const OptAssemblerData &data, const Eigen::MatrixXd &vect, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const
 
virtual void compute_stress_grad (const OptAssemblerData &data, const Eigen::MatrixXd &prev_grad_u_i, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const
 
virtual void compute_stress_prev_grad (const OptAssemblerData &data, const Eigen::MatrixXd &prev_grad_u_i, Eigen::MatrixXd &result) const
 
virtual std::map< std::string, ParamFuncparameters () const =0
 
virtual VectorNd compute_rhs (const AutodiffHessianPt &pt) const
 
virtual Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > kernel (const int dim, const AutodiffGradPt &rvect, const AutodiffScalarGrad &r) const
 
void set_materials (const std::vector< int > &body_ids, const json &body_params, const Units &units)
 
virtual void add_multimaterial (const int index, const json &params, const Units &units)
 
virtual void update_lame_params (const Eigen::MatrixXd &lambdas, const Eigen::MatrixXd &mus)
 
virtual bool is_linear () const =0
 
virtual bool is_solution_displacement () const
 
virtual bool is_fluid () const
 
virtual bool is_tensor () const
 

Protected Attributes

int size_ = -1
 

Detailed Description

abstract class

Definition at line 53 of file Assembler.hpp.

Member Typedef Documentation

◆ NamedMatrix

typedef std::pair<std::string, Eigen::MatrixXd> polyfem::assembler::Assembler::NamedMatrix

Definition at line 56 of file Assembler.hpp.

◆ ParamFunc

typedef std::function<double(const RowVectorNd &, const RowVectorNd &, double, int)> polyfem::assembler::Assembler::ParamFunc

Definition at line 57 of file Assembler.hpp.

Constructor & Destructor Documentation

◆ ~Assembler()

virtual polyfem::assembler::Assembler::~Assembler ( )
virtualdefault

Member Function Documentation

◆ add_multimaterial()

virtual void polyfem::assembler::Assembler::add_multimaterial ( const int  index,
const json params,
const Units units 
)
inlinevirtual

◆ assemble()

virtual void polyfem::assembler::Assembler::assemble ( const bool  is_volume,
const int  n_basis,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache cache,
const double  t,
StiffnessMatrix stiffness,
const bool  is_mass = false 
) const
inlinevirtual

◆ assemble_energy()

virtual double polyfem::assembler::Assembler::assemble_energy ( const bool  is_volume,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  displacement,
const Eigen::MatrixXd &  displacement_prev 
) const
inlinevirtual

◆ assemble_energy_per_element()

virtual Eigen::VectorXd polyfem::assembler::Assembler::assemble_energy_per_element ( const bool  is_volume,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  displacement,
const Eigen::MatrixXd &  displacement_prev 
) const
inlinevirtual

Reimplemented in polyfem::assembler::NLAssembler.

Definition at line 89 of file Assembler.hpp.

References polyfem::log_and_throw_error(), and name().

Referenced by polyfem::solver::ElasticForm::value_per_element_unweighted().

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

◆ assemble_gradient()

virtual void polyfem::assembler::Assembler::assemble_gradient ( const bool  is_volume,
const int  n_basis,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  displacement,
const Eigen::MatrixXd &  displacement_prev,
Eigen::MatrixXd &  rhs 
) const
inlinevirtual

◆ assemble_hessian()

virtual void polyfem::assembler::Assembler::assemble_hessian ( const bool  is_volume,
const int  n_basis,
const bool  project_to_psd,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  displacement,
const Eigen::MatrixXd &  displacement_prev,
utils::MatrixCache mat_cache,
StiffnessMatrix grad 
) const
inlinevirtual

◆ compute_dstress_dmu_dlambda()

virtual void polyfem::assembler::Assembler::compute_dstress_dmu_dlambda ( const OptAssemblerData data,
Eigen::MatrixXd &  dstress_dmu,
Eigen::MatrixXd &  dstress_dlambda 
) const
inlinevirtual

Reimplemented in polyfem::assembler::LinearElasticity, and polyfem::assembler::NeoHookeanElasticity.

Definition at line 147 of file Assembler.hpp.

References polyfem::log_and_throw_adjoint_error().

Referenced by polyfem::solver::ElasticForm::force_material_derivative().

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

◆ compute_rhs()

virtual VectorNd polyfem::assembler::Assembler::compute_rhs ( const AutodiffHessianPt pt) const
inlinevirtual

Reimplemented in polyfem::assembler::Helmholtz, polyfem::assembler::HookeLinearElasticity, polyfem::assembler::Laplacian, polyfem::assembler::LinearElasticity, polyfem::assembler::Mass, polyfem::assembler::MultiModel, polyfem::assembler::NavierStokesVelocity, polyfem::assembler::NeoHookeanElasticity, polyfem::assembler::SaintVenantElasticity, and polyfem::assembler::StokesVelocity.

Definition at line 185 of file Assembler.hpp.

References polyfem::log_and_throw_error(), and name().

Referenced by polyfem::problem::ElasticCantileverExact::rhs(), polyfem::problem::ProblemWithSolution::rhs(), and polyfem::basis::RBFWithQuadratic::setup_monomials_strong_2d().

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

◆ compute_scalar_value()

virtual void polyfem::assembler::Assembler::compute_scalar_value ( const OutputData data,
std::vector< NamedMatrix > &  result 
) const
inlinevirtual

Reimplemented in polyfem::assembler::ElasticityAssembler.

Definition at line 128 of file Assembler.hpp.

Referenced by polyfem::io::Evaluator::average_grad_based_function(), polyfem::io::Evaluator::check_scalar_value(), polyfem::io::Evaluator::compute_scalar_value(), polyfem::io::Evaluator::compute_stress_at_quadrature_points(), and polyfem::io::Evaluator::interpolate_boundary_tensor_function().

Here is the caller graph for this function:

◆ compute_stiffness_value()

virtual void polyfem::assembler::Assembler::compute_stiffness_value ( const double  t,
const assembler::ElementAssemblyValues vals,
const Eigen::MatrixXd &  local_pts,
const Eigen::MatrixXd &  displacement,
Eigen::MatrixXd &  tensor 
) const
inlinevirtual

Reimplemented in polyfem::assembler::Laplacian, polyfem::assembler::LinearElasticity, and polyfem::assembler::NeoHookeanElasticity.

Definition at line 140 of file Assembler.hpp.

References polyfem::log_and_throw_error().

Here is the call graph for this function:

◆ compute_stress_grad()

virtual void polyfem::assembler::Assembler::compute_stress_grad ( const OptAssemblerData data,
const Eigen::MatrixXd &  prev_grad_u_i,
Eigen::MatrixXd &  stress,
Eigen::MatrixXd &  result 
) const
inlinevirtual

Reimplemented in polyfem::assembler::ViscousDamping.

Definition at line 174 of file Assembler.hpp.

References polyfem::log_and_throw_adjoint_error().

Referenced by polyfem::solver::ElasticForm::force_shape_derivative().

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

◆ compute_stress_grad_multiply_mat()

virtual void polyfem::assembler::Assembler::compute_stress_grad_multiply_mat ( const OptAssemblerData data,
const Eigen::MatrixXd &  mat,
Eigen::MatrixXd &  stress,
Eigen::MatrixXd &  result 
) const
inlinevirtual

◆ compute_stress_grad_multiply_stress()

◆ compute_stress_grad_multiply_vect()

virtual void polyfem::assembler::Assembler::compute_stress_grad_multiply_vect ( const OptAssemblerData data,
const Eigen::MatrixXd &  vect,
Eigen::MatrixXd &  stress,
Eigen::MatrixXd &  result 
) const
inlinevirtual

◆ compute_stress_prev_grad()

virtual void polyfem::assembler::Assembler::compute_stress_prev_grad ( const OptAssemblerData data,
const Eigen::MatrixXd &  prev_grad_u_i,
Eigen::MatrixXd &  result 
) const
inlinevirtual

Reimplemented in polyfem::assembler::ViscousDamping.

Definition at line 179 of file Assembler.hpp.

References polyfem::log_and_throw_adjoint_error().

Referenced by polyfem::solver::ElasticForm::force_shape_derivative().

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

◆ compute_tensor_value()

virtual void polyfem::assembler::Assembler::compute_tensor_value ( const OutputData data,
std::vector< NamedMatrix > &  result 
) const
inlinevirtual

Reimplemented in polyfem::assembler::ElasticityAssembler.

Definition at line 133 of file Assembler.hpp.

Referenced by polyfem::io::Evaluator::compute_stress_at_quadrature_points(), polyfem::io::Evaluator::compute_tensor_value(), polyfem::io::Evaluator::interpolate_boundary_tensor_function(), and polyfem::io::OutGeometryData::save_surface().

Here is the caller graph for this function:

◆ is_fluid()

virtual bool polyfem::assembler::Assembler::is_fluid ( ) const
inlinevirtual

Reimplemented in polyfem::assembler::NavierStokesVelocity, polyfem::assembler::StokesVelocity, and polyfem::assembler::StokesPressure.

Definition at line 199 of file Assembler.hpp.

Referenced by polyfem::State::set_materials(), and polyfem::assembler::GenericTensorProblem::set_units().

Here is the caller graph for this function:

◆ is_linear()

virtual bool polyfem::assembler::Assembler::is_linear ( ) const
pure virtual

◆ is_solution_displacement()

virtual bool polyfem::assembler::Assembler::is_solution_displacement ( ) const
inlinevirtual

Reimplemented in polyfem::assembler::ElasticityAssembler.

Definition at line 198 of file Assembler.hpp.

◆ is_tensor()

virtual bool polyfem::assembler::Assembler::is_tensor ( ) const
inlinevirtual

◆ kernel()

virtual Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > polyfem::assembler::Assembler::kernel ( const int  dim,
const AutodiffGradPt rvect,
const AutodiffScalarGrad r 
) const
inlinevirtual

Reimplemented in polyfem::assembler::LinearElasticity, polyfem::assembler::Helmholtz, and polyfem::assembler::Laplacian.

Definition at line 187 of file Assembler.hpp.

References polyfem::log_and_throw_error(), and name().

Referenced by polyfem::problem::KernelProblem::eval_fun().

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

◆ name()

virtual std::string polyfem::assembler::Assembler::name ( ) const
pure virtual

Implemented in polyfem::assembler::AMIPSEnergy, polyfem::assembler::BilaplacianMain, polyfem::assembler::BilaplacianAux, polyfem::assembler::Helmholtz, polyfem::assembler::HookeLinearElasticity, polyfem::assembler::IncompressibleLinearElasticityDispacement, polyfem::assembler::IncompressibleLinearElasticityPressure, polyfem::assembler::Laplacian, polyfem::assembler::LinearElasticity, polyfem::assembler::Mass, polyfem::assembler::MooneyRivlin3ParamElasticity, polyfem::assembler::MooneyRivlin3ParamSymbolic, polyfem::assembler::MooneyRivlinElasticity, polyfem::assembler::MultiModel, polyfem::assembler::NavierStokesVelocity, polyfem::assembler::NeoHookeanElasticity, polyfem::assembler::NeoHookeanAutodiff, polyfem::assembler::UnconstrainedOgdenElasticity, polyfem::assembler::IncompressibleOgdenElasticity, polyfem::assembler::SaintVenantElasticity, polyfem::assembler::StokesVelocity, polyfem::assembler::StokesPressure, polyfem::assembler::OperatorSplitting, and polyfem::assembler::ViscousDamping.

Referenced by assemble(), assemble_energy(), assemble_energy_per_element(), assemble_gradient(), assemble_hessian(), polyfem::basis::PolygonalBasis2d::build_bases(), polyfem::basis::PolygonalBasis3d::build_bases(), compute_rhs(), polyfem::solver::ElasticForm::force_material_derivative(), polyfem::solver::ElasticForm::force_shape_derivative(), and kernel().

Here is the caller graph for this function:

◆ parameters()

◆ set_materials()

void polyfem::assembler::Assembler::set_materials ( const std::vector< int > &  body_ids,
const json body_params,
const Units units 
)

Definition at line 97 of file Assembler.cpp.

References add_multimaterial(), polyfem::logger(), and mat.

Here is the call graph for this function:

◆ set_size()

virtual void polyfem::assembler::Assembler::set_size ( const int  size)
inlinevirtual

Reimplemented in polyfem::assembler::HookeLinearElasticity, polyfem::assembler::IncompressibleLinearElasticityPressure, polyfem::assembler::MultiModel, polyfem::assembler::SaintVenantElasticity, and polyfem::assembler::StokesPressure.

Definition at line 64 of file Assembler.hpp.

References size(), and size_.

Referenced by polyfem::State::set_materials(), polyfem::assembler::HookeLinearElasticity::set_size(), polyfem::assembler::MultiModel::set_size(), polyfem::assembler::SaintVenantElasticity::set_size(), polyfem::State::solve_transient_navier_stokes_split(), and polyfem::assembler::RhsAssembler::time_bc().

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

◆ size()

int polyfem::assembler::Assembler::size ( ) const
inline

Definition at line 63 of file Assembler.hpp.

References size_.

Referenced by polyfem::assembler::AMIPSEnergy::add_multimaterial(), polyfem::assembler::HookeLinearElasticity::add_multimaterial(), polyfem::assembler::IncompressibleLinearElasticityDispacement::add_multimaterial(), polyfem::assembler::LinearElasticity::add_multimaterial(), polyfem::assembler::MultiModel::add_multimaterial(), polyfem::assembler::NavierStokesVelocity::add_multimaterial(), polyfem::assembler::NeoHookeanElasticity::add_multimaterial(), polyfem::assembler::NeoHookeanAutodiff::add_multimaterial(), polyfem::assembler::SaintVenantElasticity::add_multimaterial(), polyfem::assembler::StokesVelocity::add_multimaterial(), polyfem::assembler::ViscousDamping::add_multimaterial(), polyfem::assembler::HookeLinearElasticity::assemble(), polyfem::assembler::IncompressibleLinearElasticityDispacement::assemble(), polyfem::assembler::LinearElasticity::assemble(), polyfem::assembler::Mass::assemble(), polyfem::assembler::StokesVelocity::assemble(), polyfem::assembler::HookeLinearElasticity::assemble_gradient(), polyfem::assembler::LinearElasticity::assemble_gradient(), polyfem::assembler::MooneyRivlin3ParamSymbolic::assemble_gradient(), polyfem::assembler::NavierStokesVelocity::assemble_gradient(), polyfem::assembler::NeoHookeanElasticity::assemble_gradient(), polyfem::assembler::SaintVenantElasticity::assemble_gradient(), polyfem::assembler::ViscousDamping::assemble_gradient(), polyfem::assembler::ViscousDampingPrev::assemble_gradient(), polyfem::assembler::HookeLinearElasticity::assemble_hessian(), polyfem::assembler::LinearElasticity::assemble_hessian(), polyfem::assembler::MooneyRivlin3ParamSymbolic::assemble_hessian(), polyfem::assembler::NeoHookeanElasticity::assemble_hessian(), polyfem::assembler::SaintVenantElasticity::assemble_hessian(), polyfem::assembler::ViscousDamping::assemble_hessian(), polyfem::assembler::ViscousDampingPrev::assemble_hessian(), polyfem::assembler::HookeLinearElasticity::assign_stress_tensor(), polyfem::assembler::IncompressibleLinearElasticityDispacement::assign_stress_tensor(), polyfem::assembler::LinearElasticity::assign_stress_tensor(), polyfem::assembler::MooneyRivlin3ParamSymbolic::assign_stress_tensor(), polyfem::assembler::NeoHookeanElasticity::assign_stress_tensor(), polyfem::assembler::SaintVenantElasticity::assign_stress_tensor(), polyfem::assembler::ViscousDamping::compute_energy(), polyfem::assembler::ViscousDampingPrev::compute_energy(), polyfem::assembler::GenericElastic< Derived >::compute_energy_aux(), polyfem::assembler::HookeLinearElasticity::compute_energy_aux(), polyfem::assembler::LinearElasticity::compute_energy_aux(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_energy_aux(), polyfem::assembler::NeoHookeanElasticity::compute_energy_aux(), polyfem::assembler::SaintVenantElasticity::compute_energy_aux(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_energy_aux_gradient_fast(), polyfem::assembler::NeoHookeanElasticity::compute_energy_aux_gradient_fast(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_energy_hessian_aux_fast(), polyfem::assembler::NeoHookeanElasticity::compute_energy_hessian_aux_fast(), polyfem::assembler::NavierStokesVelocity::compute_N(), polyfem::assembler::Helmholtz::compute_rhs(), polyfem::assembler::HookeLinearElasticity::compute_rhs(), polyfem::assembler::LinearElasticity::compute_rhs(), polyfem::assembler::MultiModel::compute_rhs(), polyfem::assembler::NavierStokesVelocity::compute_rhs(), polyfem::assembler::NeoHookeanElasticity::compute_rhs(), polyfem::assembler::SaintVenantElasticity::compute_rhs(), polyfem::assembler::StokesVelocity::compute_rhs(), polyfem::assembler::LinearElasticity::compute_stiffness_value(), polyfem::assembler::NeoHookeanElasticity::compute_stiffness_value(), polyfem::assembler::ViscousDamping::compute_stress_aux(), polyfem::assembler::ViscousDamping::compute_stress_grad(), polyfem::assembler::ViscousDamping::compute_stress_grad_aux(), polyfem::assembler::LinearElasticity::compute_stress_grad_multiply_mat(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_stress_grad_multiply_mat(), polyfem::assembler::LinearElasticity::compute_stress_grad_multiply_stress(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_stress_grad_multiply_stress(), polyfem::assembler::MooneyRivlin3ParamSymbolic::compute_stress_grad_multiply_vect(), polyfem::assembler::NeoHookeanElasticity::compute_stress_grad_multiply_vect(), polyfem::assembler::ElasticityAssembler::compute_stress_tensor(), polyfem::assembler::NavierStokesVelocity::compute_W(), polyfem::assembler::AMIPSEnergy::elastic_energy(), polyfem::assembler::MooneyRivlin3ParamElasticity::elastic_energy(), polyfem::assembler::MooneyRivlinElasticity::elastic_energy(), polyfem::assembler::NeoHookeanAutodiff::elastic_energy(), polyfem::assembler::MooneyRivlin3ParamSymbolic::elastic_energy(), polyfem::assembler::MooneyRivlin3ParamSymbolic::get_grad_hess_autodiff(), polyfem::assembler::Helmholtz::kernel(), polyfem::assembler::HookeLinearElasticity::parameters(), polyfem::assembler::IncompressibleLinearElasticityDispacement::parameters(), polyfem::assembler::LinearElasticity::parameters(), polyfem::assembler::NeoHookeanElasticity::parameters(), polyfem::assembler::SaintVenantElasticity::parameters(), set_size(), polyfem::assembler::HookeLinearElasticity::set_size(), polyfem::assembler::IncompressibleLinearElasticityPressure::set_size(), polyfem::assembler::MultiModel::set_size(), polyfem::assembler::SaintVenantElasticity::set_size(), and polyfem::assembler::RhsAssembler::time_bc().

◆ update_lame_params()

virtual void polyfem::assembler::Assembler::update_lame_params ( const Eigen::MatrixXd &  lambdas,
const Eigen::MatrixXd &  mus 
)
inlinevirtual

Reimplemented in polyfem::assembler::LinearElasticity, and polyfem::assembler::NeoHookeanElasticity.

Definition at line 192 of file Assembler.hpp.

References polyfem::log_and_throw_error().

Here is the call graph for this function:

Member Data Documentation

◆ size_


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