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

#include <Assembler.hpp>

Inheritance diagram for polyfem::assembler::MixedNLAssembler:
[legend]
Collaboration diagram for polyfem::assembler::MixedNLAssembler:
[legend]

Public Types

using SolutionSplitter = std::function< void(const Eigen::MatrixXd &x, Eigen::MatrixXd &x_phi, Eigen::MatrixXd &x_psi)>
 
- Public Types inherited from polyfem::assembler::Assembler
typedef std::pair< std::string, Eigen::MatrixXd > NamedMatrix
 
typedef std::function< double(const RowVectorNd &, const RowVectorNd &, double, int)> ParamFunc
 

Public Member Functions

virtual ~MixedNLAssembler ()=default
 
double assemble_energy (const bool is_volume, const int n_psi_basis, const int n_phi_basis, const std::vector< basis::ElementBases > &psi_bases, const std::vector< basis::ElementBases > &phi_bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &psi_cache, const AssemblyValsCache &phi_cache, const double t, const double dt, const Eigen::MatrixXd &x, const Eigen::MatrixXd &x_prev, const SolutionSplitter &split_solution) const
 
Eigen::VectorXd assemble_energy_per_element (const bool is_volume, const int n_psi_basis, const int n_phi_basis, const std::vector< basis::ElementBases > &psi_bases, const std::vector< basis::ElementBases > &phi_bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &psi_cache, const AssemblyValsCache &phi_cache, const double t, const double dt, const Eigen::MatrixXd &x, const Eigen::MatrixXd &x_prev, const SolutionSplitter &split_solution) const
 
void assemble_gradient (const bool is_volume, const int n_psi_basis, const int n_phi_basis, const std::vector< basis::ElementBases > &psi_bases, const std::vector< basis::ElementBases > &phi_bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &psi_cache, const AssemblyValsCache &phi_cache, const double t, const double dt, const Eigen::MatrixXd &x, const Eigen::MatrixXd &x_prev, const SolutionSplitter &split_solution, Eigen::MatrixXd &grad) const
 
void assemble_hessian (const bool is_volume, const int n_psi_basis, const int n_phi_basis, const bool project_to_psd, const std::vector< basis::ElementBases > &psi_bases, const std::vector< basis::ElementBases > &phi_bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &psi_cache, const AssemblyValsCache &phi_cache, const double t, const double dt, const Eigen::MatrixXd &x, const Eigen::MatrixXd &x_prev, const SolutionSplitter &split_solution, utils::MatrixCache &mat_cache, StiffnessMatrix &hessian) const
 
bool is_linear () const override
 
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
 
- Public Member Functions inherited from polyfem::assembler::Assembler
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 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, const std::string &root_path)
 
virtual void add_multimaterial (const int index, const json &params, const Units &units, const std::string &root_path)
 
virtual void update_lame_params (const Eigen::MatrixXd &lambdas, const Eigen::MatrixXd &mus)
 
virtual bool is_solution_displacement () const
 
virtual bool is_fluid () const
 
virtual bool is_tensor () const
 

Protected Member Functions

virtual int rows () const =0
 
virtual int cols () const =0
 
virtual double compute_energy (const MixedNonLinearAssemblerData &data) const =0
 
virtual Eigen::VectorXd compute_gradient (const MixedNonLinearAssemblerData &data) const =0
 
virtual Eigen::MatrixXd compute_hessian (const MixedNonLinearAssemblerData &data) const =0
 

Additional Inherited Members

- Protected Attributes inherited from polyfem::assembler::Assembler
int size_ = -1
 

Detailed Description

Definition at line 208 of file Assembler.hpp.

Member Typedef Documentation

◆ SolutionSplitter

using polyfem::assembler::MixedNLAssembler::SolutionSplitter = std::function<void( const Eigen::MatrixXd &x, Eigen::MatrixXd &x_phi, Eigen::MatrixXd &x_psi)>

Definition at line 211 of file Assembler.hpp.

Constructor & Destructor Documentation

◆ ~MixedNLAssembler()

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

Member Function Documentation

◆ assemble_energy() [1/2]

double polyfem::assembler::MixedNLAssembler::assemble_energy ( const bool  is_volume,
const int  n_psi_basis,
const int  n_phi_basis,
const std::vector< basis::ElementBases > &  psi_bases,
const std::vector< basis::ElementBases > &  phi_bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache psi_cache,
const AssemblyValsCache phi_cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  x,
const Eigen::MatrixXd &  x_prev,
const SolutionSplitter split_solution 
) const

Definition at line 577 of file Assembler.cpp.

References cols(), compute_energy(), polyfem::utils::create_thread_storage(), polyfem::assembler::ElementAssemblyValues::det, polyfem::utils::get_local_thread_storage(), polyfem::utils::maybe_parallel_for(), polyfem::assembler::ElementAssemblyValues::quadrature, quadrature, rows(), polyfem::assembler::Assembler::size(), polyfem::quadrature::Quadrature::weights, and x.

Referenced by assemble_energy_per_element(), and polyfem::solver::MixedAssemblerForm::value_unweighted().

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

◆ assemble_energy() [2/2]

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

Reimplemented from polyfem::assembler::Assembler.

Definition at line 81 of file Assembler.hpp.

◆ assemble_energy_per_element() [1/2]

Eigen::VectorXd polyfem::assembler::MixedNLAssembler::assemble_energy_per_element ( const bool  is_volume,
const int  n_psi_basis,
const int  n_phi_basis,
const std::vector< basis::ElementBases > &  psi_bases,
const std::vector< basis::ElementBases > &  phi_bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache psi_cache,
const AssemblyValsCache phi_cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  x,
const Eigen::MatrixXd &  x_prev,
const SolutionSplitter split_solution 
) const

Definition at line 637 of file Assembler.cpp.

References assemble_energy(), cols(), compute_energy(), polyfem::utils::create_thread_storage(), polyfem::assembler::ElementAssemblyValues::det, polyfem::utils::get_local_thread_storage(), polyfem::utils::maybe_parallel_for(), polyfem::assembler::ElementAssemblyValues::quadrature, quadrature, rows(), polyfem::assembler::Assembler::size(), polyfem::quadrature::Quadrature::weights, and x.

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

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

◆ assemble_energy_per_element() [2/2]

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 from polyfem::assembler::Assembler.

Definition at line 91 of file Assembler.hpp.

◆ assemble_gradient() [1/2]

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

Reimplemented from polyfem::assembler::Assembler.

Definition at line 102 of file Assembler.hpp.

◆ assemble_gradient() [2/2]

void polyfem::assembler::MixedNLAssembler::assemble_gradient ( const bool  is_volume,
const int  n_psi_basis,
const int  n_phi_basis,
const std::vector< basis::ElementBases > &  psi_bases,
const std::vector< basis::ElementBases > &  phi_bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache psi_cache,
const AssemblyValsCache phi_cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  x,
const Eigen::MatrixXd &  x_prev,
const SolutionSplitter split_solution,
Eigen::MatrixXd &  grad 
) const

Definition at line 703 of file Assembler.cpp.

References polyfem::assembler::ElementAssemblyValues::basis_values, cols(), compute_gradient(), polyfem::utils::create_thread_storage(), polyfem::assembler::ElementAssemblyValues::det, polyfem::utils::get_local_thread_storage(), polyfem::utils::maybe_parallel_for(), polyfem::assembler::ElementAssemblyValues::quadrature, quadrature, rows(), polyfem::assembler::Assembler::size(), polyfem::quadrature::Quadrature::weights, and x.

Referenced by polyfem::solver::MixedAssemblerForm::first_derivative_unweighted().

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

◆ assemble_hessian() [1/2]

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

Reimplemented from polyfem::assembler::Assembler.

Definition at line 115 of file Assembler.hpp.

◆ assemble_hessian() [2/2]

void polyfem::assembler::MixedNLAssembler::assemble_hessian ( const bool  is_volume,
const int  n_psi_basis,
const int  n_phi_basis,
const bool  project_to_psd,
const std::vector< basis::ElementBases > &  psi_bases,
const std::vector< basis::ElementBases > &  phi_bases,
const std::vector< basis::ElementBases > &  gbases,
const AssemblyValsCache psi_cache,
const AssemblyValsCache phi_cache,
const double  t,
const double  dt,
const Eigen::MatrixXd &  x,
const Eigen::MatrixXd &  x_prev,
const SolutionSplitter split_solution,
utils::MatrixCache mat_cache,
StiffnessMatrix hessian 
) const

◆ cols()

virtual int polyfem::assembler::MixedNLAssembler::cols ( ) const
protectedpure virtual

Implemented in polyfem::assembler::ThermoElasticity.

Referenced by assemble_energy(), assemble_energy_per_element(), assemble_gradient(), and assemble_hessian().

Here is the caller graph for this function:

◆ compute_energy()

virtual double polyfem::assembler::MixedNLAssembler::compute_energy ( const MixedNonLinearAssemblerData data) const
protectedpure virtual

Implemented in polyfem::assembler::ThermoElasticity.

Referenced by assemble_energy(), and assemble_energy_per_element().

Here is the caller graph for this function:

◆ compute_gradient()

virtual Eigen::VectorXd polyfem::assembler::MixedNLAssembler::compute_gradient ( const MixedNonLinearAssemblerData data) const
protectedpure virtual

Implemented in polyfem::assembler::ThermoElasticity.

Referenced by assemble_gradient().

Here is the caller graph for this function:

◆ compute_hessian()

virtual Eigen::MatrixXd polyfem::assembler::MixedNLAssembler::compute_hessian ( const MixedNonLinearAssemblerData data) const
protectedpure virtual

Implemented in polyfem::assembler::ThermoElasticity.

Referenced by assemble_hessian().

Here is the caller graph for this function:

◆ is_linear()

bool polyfem::assembler::MixedNLAssembler::is_linear ( ) const
inlineoverridevirtual

Implements polyfem::assembler::Assembler.

Definition at line 287 of file Assembler.hpp.

◆ rows()

virtual int polyfem::assembler::MixedNLAssembler::rows ( ) const
protectedpure virtual

Implemented in polyfem::assembler::ThermoElasticity.

Referenced by assemble_energy(), assemble_energy_per_element(), assemble_gradient(), and assemble_hessian().

Here is the caller graph for this function:

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