PolyFEM
Loading...
Searching...
No Matches
polyfem::assembler::Laplacian Class Reference

#include <Laplacian.hpp>

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

Public Member Functions

 Laplacian (const std::string &conductivity_param_name="")
 
std::string name () const override
 
std::map< std::string, ParamFuncparameters () const override
 
void add_multimaterial (const int index, const json &params, const Units &units, const std::string &root_path) override
 
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 9, 1 > assemble (const LinearAssemblerData &data) const override
 computes local stiffness matrix (1x1) for bases i,j where i,j is passed in through data ie integral of grad(phi_i) dot grad(phi_j)
 
double compute_energy (const NonLinearAssemblerData &data) const override
 
Eigen::VectorXd assemble_gradient (const NonLinearAssemblerData &data) const override
 
Eigen::MatrixXd assemble_hessian (const NonLinearAssemblerData &data) const override
 
VectorNd compute_rhs (const AutodiffHessianPt &pt) const override
 uses autodiff to compute the rhs for a fabricated solution in this case it just return pt.getHessian().trace() pt is the evaluation of the solution at a point
 
void compute_stress_grad_multiply_mat (const OptAssemblerData &data, const Eigen::MatrixXd &mat, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const override
 
void compute_stiffness_value (const double t, const assembler::ElementAssemblyValues &vals, const Eigen::MatrixXd &local_pts, const Eigen::MatrixXd &displacement, Eigen::MatrixXd &tensor) const override
 
Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > kernel (const int dim, const AutodiffGradPt &rvect, const AutodiffScalarGrad &r) const override
 kernel of the pde, used in kernel problem
 
bool is_linear () const override
 
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 override
 assembles the stiffness matrix for the given basis the bilinear form (local assembler) is encoded by the overloaded assemble (see below) function that the subclass (eg Laplacian) defines sets stiffness and modifies cache if it has not already been computed
 
virtual Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 9, 1 > assemble (const LinearAssemblerData &data) const=0
 local assembly function that defines the bilinear form (LHS) computes and returns a single local stiffness value
 
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 override
 
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 override
 
virtual Eigen::VectorXd assemble_gradient (const NonLinearAssemblerData &data) const=0
 
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 override
 
virtual Eigen::MatrixXd assemble_hessian (const NonLinearAssemblerData &data) const=0
 
- Public Member Functions inherited from polyfem::assembler::LinearAssembler
 LinearAssembler ()
 
virtual ~LinearAssembler ()=default
 
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 override
 assembles the stiffness matrix for the given basis the bilinear form (local assembler) is encoded by the overloaded assemble (see below) function that the subclass (eg Laplacian) defines sets stiffness and modifies cache if it has not already been computed
 
- Public Member Functions inherited from polyfem::assembler::Assembler
virtual ~Assembler ()=default
 
int size () const
 
virtual void set_size (const int size)
 
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_dstress_dmu_dlambda (const OptAssemblerData &data, Eigen::MatrixXd &dstress_dmu, Eigen::MatrixXd &dstress_dlambda) 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
 
void set_materials (const std::vector< int > &body_ids, const json &body_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
 
- Public Member Functions inherited from polyfem::assembler::NLAssembler
virtual ~NLAssembler ()=default
 
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 override
 
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 override
 
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 override
 
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 override
 

Private Member Functions

double conductivity (const RowVectorNd &uv, const RowVectorNd &p, double t, int element_id) const
 

Private Attributes

std::string conductivity_param_name_
 
GenericMatParam conductivity_
 

Additional Inherited Members

- 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
 
- Protected Attributes inherited from polyfem::assembler::Assembler
int size_ = -1
 

Detailed Description

Definition at line 12 of file Laplacian.hpp.

Constructor & Destructor Documentation

◆ Laplacian()

polyfem::assembler::Laplacian::Laplacian ( const std::string &  conductivity_param_name = "")
explicit

Definition at line 29 of file Laplacian.cpp.

Member Function Documentation

◆ add_multimaterial()

void polyfem::assembler::Laplacian::add_multimaterial ( const int  index,
const json params,
const Units units,
const std::string &  root_path 
)
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

Definition at line 48 of file Laplacian.cpp.

References polyfem::assembler::GenericMatParam::add_multimaterial(), conductivity_, conductivity_param_name_, and polyfem::Units::thermal_conductivity().

Here is the call graph for this function:

◆ assemble() [1/3]

void polyfem::assembler::LinearAssembler::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
overridevirtual

assembles the stiffness matrix for the given basis the bilinear form (local assembler) is encoded by the overloaded assemble (see below) function that the subclass (eg Laplacian) defines sets stiffness and modifies cache if it has not already been computed

Reimplemented from polyfem::assembler::Assembler.

◆ assemble() [2/3]

Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 9, 1 > polyfem::assembler::Laplacian::assemble ( const LinearAssemblerData data) const
overridevirtual

computes local stiffness matrix (1x1) for bases i,j where i,j is passed in through data ie integral of grad(phi_i) dot grad(phi_j)

Implements polyfem::assembler::LinearAssembler.

Definition at line 62 of file Laplacian.cpp.

References polyfem::assembler::ElementAssemblyValues::basis_values, conductivity(), polyfem::assembler::LinearAssemblerData::da, polyfem::assembler::ElementAssemblyValues::element_id, polyfem::assembler::LinearAssemblerData::i, polyfem::assembler::LinearAssemblerData::j, polyfem::quadrature::Quadrature::points, polyfem::assembler::ElementAssemblyValues::quadrature, polyfem::assembler::LinearAssemblerData::t, polyfem::assembler::ElementAssemblyValues::val, and polyfem::assembler::LinearAssemblerData::vals.

Referenced by assemble_hessian(), polyfem::varform::OperatorSplittingVarForm::solve_problem(), and polyfem::legacy::State::solve_transient_navier_stokes_split().

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

◆ assemble() [3/3]

virtual Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 9, 1 > polyfem::assembler::LinearAssembler::assemble ( const LinearAssemblerData data) const
virtual

local assembly function that defines the bilinear form (LHS) computes and returns a single local stiffness value

Implements polyfem::assembler::LinearAssembler.

◆ assemble_energy()

double polyfem::assembler::NLAssembler::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
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

Definition at line 336 of file Assembler.cpp.

◆ assemble_gradient() [1/3]

void polyfem::assembler::NLAssembler::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
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

◆ assemble_gradient() [2/3]

Eigen::VectorXd polyfem::assembler::Laplacian::assemble_gradient ( const NonLinearAssemblerData data) const
overridevirtual

Implements polyfem::assembler::NLAssembler.

Definition at line 86 of file Laplacian.cpp.

References assemble_hessian(), and polyfem::assembler::Assembler::size().

Here is the call graph for this function:

◆ assemble_gradient() [3/3]

virtual Eigen::VectorXd polyfem::assembler::NLAssembler::assemble_gradient ( const NonLinearAssemblerData data) const
virtual

◆ assemble_hessian() [1/3]

void polyfem::assembler::NLAssembler::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
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

◆ assemble_hessian() [2/3]

Eigen::MatrixXd polyfem::assembler::Laplacian::assemble_hessian ( const NonLinearAssemblerData data) const
overridevirtual

Implements polyfem::assembler::NLAssembler.

Definition at line 93 of file Laplacian.cpp.

References assemble(), polyfem::assembler::ElementAssemblyValues::basis_values, polyfem::assembler::NonLinearAssemblerData::da, polyfem::assembler::Assembler::size(), polyfem::assembler::NonLinearAssemblerData::t, and polyfem::assembler::NonLinearAssemblerData::vals.

Referenced by assemble_gradient(), and compute_energy().

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

◆ assemble_hessian() [3/3]

virtual Eigen::MatrixXd polyfem::assembler::NLAssembler::assemble_hessian ( const NonLinearAssemblerData data) const
virtual

◆ compute_energy()

double polyfem::assembler::Laplacian::compute_energy ( const NonLinearAssemblerData data) const
overridevirtual

Implements polyfem::assembler::NLAssembler.

Definition at line 78 of file Laplacian.cpp.

References assemble_hessian(), and polyfem::assembler::Assembler::size().

Here is the call graph for this function:

◆ compute_rhs()

Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 > polyfem::assembler::Laplacian::compute_rhs ( const AutodiffHessianPt pt) const
overridevirtual

uses autodiff to compute the rhs for a fabricated solution in this case it just return pt.getHessian().trace() pt is the evaluation of the solution at a point

Reimplemented from polyfem::assembler::Assembler.

Definition at line 108 of file Laplacian.cpp.

◆ compute_stiffness_value()

void polyfem::assembler::Laplacian::compute_stiffness_value ( const double  t,
const assembler::ElementAssemblyValues vals,
const Eigen::MatrixXd &  local_pts,
const Eigen::MatrixXd &  displacement,
Eigen::MatrixXd &  tensor 
) const
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

Definition at line 139 of file Laplacian.cpp.

References conductivity(), and vals.

Here is the call graph for this function:

◆ compute_stress_grad_multiply_mat()

void polyfem::assembler::Laplacian::compute_stress_grad_multiply_mat ( const OptAssemblerData data,
const Eigen::MatrixXd &  mat,
Eigen::MatrixXd &  stress,
Eigen::MatrixXd &  result 
) const
overridevirtual

Reimplemented from polyfem::assembler::Assembler.

Definition at line 130 of file Laplacian.cpp.

References polyfem::assembler::OptAssemblerData::grad_u_i.

◆ conductivity()

double polyfem::assembler::Laplacian::conductivity ( const RowVectorNd uv,
const RowVectorNd p,
double  t,
int  element_id 
) const
private

Definition at line 54 of file Laplacian.cpp.

References conductivity_, and conductivity_param_name_.

Referenced by assemble(), compute_stiffness_value(), and parameters().

Here is the caller graph for this function:

◆ is_linear()

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

Reimplemented from polyfem::assembler::LinearAssembler.

Definition at line 54 of file Laplacian.hpp.

◆ kernel()

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

kernel of the pde, used in kernel problem

Reimplemented from polyfem::assembler::Assembler.

Definition at line 116 of file Laplacian.cpp.

◆ name()

std::string polyfem::assembler::Laplacian::name ( ) const
inlineoverridevirtual

Implements polyfem::assembler::Assembler.

Definition at line 22 of file Laplacian.hpp.

◆ parameters()

std::map< std::string, Assembler::ParamFunc > polyfem::assembler::Laplacian::parameters ( ) const
overridevirtual

Implements polyfem::assembler::Assembler.

Definition at line 35 of file Laplacian.cpp.

References conductivity(), and conductivity_param_name_.

Here is the call graph for this function:

Member Data Documentation

◆ conductivity_

GenericMatParam polyfem::assembler::Laplacian::conductivity_
private

Definition at line 60 of file Laplacian.hpp.

Referenced by add_multimaterial(), and conductivity().

◆ conductivity_param_name_

std::string polyfem::assembler::Laplacian::conductivity_param_name_
private

Definition at line 59 of file Laplacian.hpp.

Referenced by add_multimaterial(), conductivity(), and parameters().


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