Alamo
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes
Operator::Elastic< SYM > Class Template Reference
Inheritance diagram for Operator::Elastic< SYM >:
[legend]
Collaboration diagram for Operator::Elastic< SYM >:
[legend]

Public Types

enum  BC { BC::Displacement, BC::Traction, BC::Periodic, BC::Neumann }
 
enum  Boundary { Boundary::Lo, Boundary::Hi, Boundary::None }
 

Public Member Functions

 Elastic ()
 
 Elastic (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info)
 
virtual ~Elastic ()
 
 Elastic (const Elastic &)=delete
 
 Elastic (Elastic &&)=delete
 
Elasticoperator= (const Elastic &)=delete
 
Elasticoperator= (Elastic &&)=delete
 
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FArrayBox > const * > &a_factory={})
 
virtual void SetHomogeneous (bool a_homogeneous) override
 
void SetModel (Set::Matrix4< AMREX_SPACEDIM, SYM > &a_model)
 
void SetModel (int amrlev, const MultiTab &a_model)
 
void SetModel (const amrex::Vector< MultiTab > &a_model)
 
void SetModel (const Set::Field< Set::Matrix4< AMREX_SPACEDIM, SYM >> &a_model)
 
void SetPsi (int amrlev, const amrex::MultiFab &a_psi)
 
void SetPsi (int amrlev, const amrex::MultiFab &a_psi, const Set::Scalar &a_psi_small)
 
void SetBC (::BC::Operator::Elastic::Elastic *a_bc)
 
::BC::Operator::Elastic::ElasticGetBC ()
 
void Strain (int amrlev, amrex::MultiFab &epsfab, const amrex::MultiFab &ufab, bool voigt=false) const
 
void Stress (int amrlev, amrex::MultiFab &sigmafab, const amrex::MultiFab &ufab, bool voigt=false, bool a_homogeneous=false)
 
void Energy (int amrlev, amrex::MultiFab &energy, const amrex::MultiFab &u, bool a_homogeneous=false)
 
void SetBC (const std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > &a_bc_lo, const std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > &a_bc_hi)
 
void Error0x (int amrlev, int mglev, MultiFab &R0x, const MultiFab &x) const
 
void SetTesting (bool a_testing)
 
void SetUniform (bool a_uniform)
 
virtual void SetAverageDownCoeffs (bool a_average_down_coeffs) override
 
- Public Member Functions inherited from Operator::Operator< Grid::Node >
 Operator ()
 
 Operator (const amrex::Vector< amrex::Geometry > &a_geom, const amrex::Vector< amrex::BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FArrayBox > const * > &a_factory={})
 
virtual ~Operator ()
 
 Operator (const Operator &)=delete
 
 Operator (Operator &&)=delete
 
Operatoroperator= (const Operator &)=delete
 
Operatoroperator= (Operator &&)=delete
 
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FArrayBox > const * > &a_factory={})
 
const Geometry & Geom (int amr_lev, int mglev=0) const noexcept
 
void Reflux (int crse_amrlev, MultiFab &res, const MultiFab &crse_sol, const MultiFab &crse_rhs, MultiFab &fine_res, MultiFab &fine_sol, const MultiFab &fine_rhs)
 
void Apply (int amrlev, int mglev, MultiFab &out, const MultiFab &in) const
 
void SetOmega (Set::Scalar a_omega)
 
void SetNormalizeDDW (bool a_normalize_ddw)
 
void RegisterNewFab (amrex::Vector< amrex::MultiFab > &input)
 
void RegisterNewFab (amrex::Vector< std::unique_ptr< amrex::MultiFab > > &input)
 
const amrex::FArrayBox & GetFab (const int num, const int amrlev, const int mglev, const amrex::MFIter &mfi) const
 
virtual int getNGrow (int=0, int=0) const override final
 
virtual void solutionResidual (int amrlev, MultiFab &resid, MultiFab &x, const MultiFab &b, const MultiFab *crse_bcdata=nullptr) override final
 
virtual void correctionResidual (int amrlev, int mglev, MultiFab &resid, MultiFab &x, const MultiFab &b, BCMode bc_mode, const MultiFab *crse_bcdata=nullptr) override final
 

Static Public Member Functions

static void Parse (Elastic< SYM > &value, IO::ParmParse &pp)
 
- Static Public Member Functions inherited from Operator::Operator< Grid::Node >
static void realFillBoundary (MultiFab &phi, const Geometry &geom)
 

Protected Member Functions

virtual void Diagonal (int amrlev, int mglev, amrex::MultiFab &diag) override
 
virtual void Fapply (int amrlev, int mglev, MultiFab &out, const MultiFab &in) const override final
 
virtual void FFlux (int amrlev, const MFIter &mfi, const std::array< FArrayBox *, AMREX_SPACEDIM > &flux, const FArrayBox &sol, const int face_only=0) const final
 
virtual int getNComp () const override
 
virtual bool isCrossStencil () const
 
virtual void prepareForSolve () override
 
- Protected Member Functions inherited from Operator::Operator< Grid::Node >
virtual void Diagonal (bool recompute=false)
 
virtual void Fsmooth (int amrlev, int mglev, MultiFab &x, const MultiFab &b) const override
 
virtual void normalize (int amrlev, int mglev, MultiFab &mf) const override
 
virtual void reflux (int crse_amrlev, MultiFab &res, const MultiFab &crse_sol, const MultiFab &crse_rhs, MultiFab &fine_res, MultiFab &fine_sol, const MultiFab &fine_rhs) const override
 
virtual void restriction (int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final
 
virtual void interpolation (int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const override final
 
virtual void averageDownSolutionRHS (int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
 
virtual bool isSingular (int amrlev) const final
 
virtual bool isBottomSingular () const final
 
virtual void applyBC (int amrlev, int mglev, MultiFab &phi, BCMode bc_mode, amrex::MLLinOp::StateMode, bool skip_fillboundary=false) const final
 
virtual void fixUpResidualMask (int amrlev, iMultiFab &resmsk) final
 

Private Types

using MATRIX4 = Set::Matrix4< AMREX_SPACEDIM, SYM >
 
using TArrayBox = amrex::BaseFab< MATRIX4 >
 
using MultiTab = amrex::FabArray< TArrayBox >
 

Private Member Functions

virtual void averageDownCoeffs () override
 
void averageDownCoeffsDifferentAmrLevels (int fine_amrlev)
 
void averageDownCoeffsSameAmrLevel (int amrlev)
 
void FillBoundaryCoeff (MultiTab &sigma, const Geometry &geom)
 
void FillBoundaryCoeff (MultiFab &psi, const Geometry &geom)
 

Private Attributes

std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > m_bc_lo
 
std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > m_bc_hi
 
amrex::Vector< Set::Field< Set::Matrix4< AMREX_SPACEDIM, SYM > > > m_ddw_mf
 
amrex::Vector< Set::Field< Set::Scalar > > m_psi_mf
 
Set::Scalar m_psi_small = 1E-8
 
bool m_psi_set = false
 
bool m_testing = false
 
bool m_uniform = false
 
bool m_homogeneous = false
 
bool m_average_down_coeffs = false
 
::BC::Operator::Elastic::Elasticm_bc
 
bool m_model_set = false
 
bool m_bc_set = false
 

Additional Inherited Members

- Protected Attributes inherited from Operator::Operator< Grid::Node >
int m_num_a_fabs = 0
 
bool m_diagonal_computed = false
 
amrex::Vector< amrex::Vector< amrex::Vector< amrex::MultiFab > > > m_a_coeffs
 
amrex::Vector< amrex::Vector< std::unique_ptr< amrex::MultiFab > > > m_diag
 
Set::Scalar m_omega = 2./3.
 
bool m_normalize_ddw = false
 

Detailed Description

template<int SYM>
class Operator::Elastic< SYM >

Definition at line 22 of file Elastic.H.

Member Typedef Documentation

◆ MATRIX4

template<int SYM>
using Operator::Elastic< SYM >::MATRIX4 = Set::Matrix4<AMREX_SPACEDIM,SYM>
private

Definition at line 24 of file Elastic.H.

◆ MultiTab

template<int SYM>
using Operator::Elastic< SYM >::MultiTab = amrex::FabArray<TArrayBox>
private

Definition at line 26 of file Elastic.H.

◆ TArrayBox

template<int SYM>
using Operator::Elastic< SYM >::TArrayBox = amrex::BaseFab<MATRIX4>
private

Definition at line 25 of file Elastic.H.

Member Enumeration Documentation

◆ BC

template<int SYM>
enum Operator::Elastic::BC
strong
Enumerator
Displacement 
Traction 
Periodic 
Neumann 

Definition at line 28 of file Elastic.H.

◆ Boundary

template<int SYM>
enum Operator::Elastic::Boundary
strong
Enumerator
Lo 
Hi 
None 

Definition at line 29 of file Elastic.H.

Constructor & Destructor Documentation

◆ Elastic() [1/4]

template<int SYM>
Operator::Elastic< SYM >::Elastic ( )
inline

Definition at line 31 of file Elastic.H.

◆ Elastic() [2/4]

template<int SYM>
Operator::Elastic< SYM >::Elastic ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo &  a_info 
)

Definition at line 10 of file Elastic.cpp.

◆ ~Elastic()

template<int SYM>
Operator::Elastic< SYM >::~Elastic
virtual

Definition at line 21 of file Elastic.cpp.

◆ Elastic() [3/4]

template<int SYM>
Operator::Elastic< SYM >::Elastic ( const Elastic< SYM > &  )
delete

◆ Elastic() [4/4]

template<int SYM>
Operator::Elastic< SYM >::Elastic ( Elastic< SYM > &&  )
delete

Member Function Documentation

◆ averageDownCoeffs()

template<int SYM>
void Operator::Elastic< SYM >::averageDownCoeffs
overrideprivatevirtual

Implements Operator::Operator< Grid::Node >.

Definition at line 582 of file Elastic.cpp.

◆ averageDownCoeffsDifferentAmrLevels()

template<int SYM>
void Operator::Elastic< SYM >::averageDownCoeffsDifferentAmrLevels ( int  fine_amrlev)
private

Definition at line 605 of file Elastic.cpp.

◆ averageDownCoeffsSameAmrLevel()

template<int SYM>
Operator::Elastic< SYM >::averageDownCoeffsSameAmrLevel ( int  amrlev)
private

Update coarse-level AMR coefficients with data from fine level.

This function is called before the solve, and it updates the Matrix4 coefficients on coarse levels with averaged versions on the fine levels. Typically, this is not necessary, since the coefficients are computed on each level already. However, there are some cases where this messes up the multigrid solver. (Phase field fracture is the primary example.)

This is disabled by default. In order to enable, call

elasticoperator.SetAverageDownCoeffs(true);

Definition at line 720 of file Elastic.cpp.

◆ define()

template<int SYM>
void Operator::Elastic< SYM >::define ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo &  a_info = LPInfo(),
const Vector< FabFactory< FArrayBox > const * > &  a_factory = {} 
)

Definition at line 26 of file Elastic.cpp.

◆ Diagonal()

template<int SYM>
void Operator::Elastic< SYM >::Diagonal ( int  amrlev,
int  mglev,
amrex::MultiFab &  diag 
)
overrideprotectedvirtual

Reimplemented from Operator::Operator< Grid::Node >.

Definition at line 272 of file Elastic.cpp.

◆ Energy()

template<int SYM>
void Operator::Elastic< SYM >::Energy ( int  amrlev,
amrex::MultiFab &  energy,
const amrex::MultiFab &  u,
bool  a_homogeneous = false 
)

Compute energy density \(\mathbb{W}\) given the displacement field \(\mathbf{u}\) by

\[\mathbb{W} = \mathbb{\Sigma}\mathbb{\Sigma}\mathbf{\sigma}_{ij}\mathbf{\epsilon}_{ij}\]

where \(\mathbf{\sigma}\) and \(\mathbf{\epsilon}\) are as defined above

Definition at line 529 of file Elastic.cpp.

◆ Error0x()

template<int SYM>
void Operator::Elastic< SYM >::Error0x ( int  amrlev,
int  mglev,
MultiFab &  R0x,
const MultiFab &  x 
) const

Definition at line 359 of file Elastic.cpp.

◆ Fapply()

template<int SYM>
void Operator::Elastic< SYM >::Fapply ( int  amrlev,
int  mglev,
MultiFab &  out,
const MultiFab &  in 
) const
finaloverrideprotectedvirtual

Implements Operator::Operator< Grid::Node >.

Definition at line 147 of file Elastic.cpp.

◆ FFlux()

template<int SYM>
void Operator::Elastic< SYM >::FFlux ( int  amrlev,
const MFIter &  mfi,
const std::array< FArrayBox *, AMREX_SPACEDIM > &  flux,
const FArrayBox &  sol,
const int  face_only = 0 
) const
finalprotectedvirtual

Definition at line 386 of file Elastic.cpp.

◆ FillBoundaryCoeff() [1/2]

template<int SYM>
void Operator::Elastic< SYM >::FillBoundaryCoeff ( MultiFab &  psi,
const Geometry &  geom 
)
private

Definition at line 901 of file Elastic.cpp.

◆ FillBoundaryCoeff() [2/2]

template<int SYM>
void Operator::Elastic< SYM >::FillBoundaryCoeff ( MultiTab sigma,
const Geometry &  geom 
)
private

Definition at line 883 of file Elastic.cpp.

◆ GetBC()

template<int SYM>
::BC::Operator::Elastic::Elastic& Operator::Elastic< SYM >::GetBC ( )
inline

Definition at line 70 of file Elastic.H.

◆ getNComp()

template<int SYM>
virtual int Operator::Elastic< SYM >::getNComp ( ) const
inlineoverrideprotectedvirtual

Definition at line 127 of file Elastic.H.

◆ isCrossStencil()

template<int SYM>
virtual bool Operator::Elastic< SYM >::isCrossStencil ( ) const
inlineprotectedvirtual

Definition at line 128 of file Elastic.H.

◆ operator=() [1/2]

template<int SYM>
Elastic& Operator::Elastic< SYM >::operator= ( const Elastic< SYM > &  )
delete

◆ operator=() [2/2]

template<int SYM>
Elastic& Operator::Elastic< SYM >::operator= ( Elastic< SYM > &&  )
delete

◆ Parse()

template<int SYM>
static void Operator::Elastic< SYM >::Parse ( Elastic< SYM > &  value,
IO::ParmParse pp 
)
inlinestatic

Definition at line 186 of file Elastic.H.

◆ prepareForSolve()

template<int SYM>
virtual void Operator::Elastic< SYM >::prepareForSolve ( )
inlineoverrideprotectedvirtual

Reimplemented from Operator::Operator< Grid::Node >.

Definition at line 129 of file Elastic.H.

◆ SetAverageDownCoeffs()

template<int SYM>
virtual void Operator::Elastic< SYM >::SetAverageDownCoeffs ( bool  a_average_down_coeffs)
inlineoverridevirtual

Reimplemented from Operator::Operator< Grid::Node >.

Definition at line 110 of file Elastic.H.

◆ SetBC() [1/2]

template<int SYM>
void Operator::Elastic< SYM >::SetBC ( ::BC::Operator::Elastic< SYM >::Elastic< SYM > *  a_bc)
inline

The different types of Boundary Condtiions are listed in the BC::Operator::Elastic documentation

Definition at line 61 of file Elastic.H.

◆ SetBC() [2/2]

template<int SYM>
void Operator::Elastic< SYM >::SetBC ( const std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > &  a_bc_lo,
const std::array< std::array< BC, AMREX_SPACEDIM >, AMREX_SPACEDIM > &  a_bc_hi 
)
inline

This function is depricated and should not be used. Use the other SetBC function.

Definition at line 99 of file Elastic.H.

◆ SetHomogeneous()

template<int SYM>
virtual void Operator::Elastic< SYM >::SetHomogeneous ( bool  a_homogeneous)
inlineoverridevirtual

Reimplemented from Operator::Operator< Grid::Node >.

Definition at line 48 of file Elastic.H.

◆ SetModel() [1/4]

template<int SYM>
void Operator::Elastic< SYM >::SetModel ( const amrex::Vector< MultiTab > &  a_model)
inline

Definition at line 51 of file Elastic.H.

◆ SetModel() [2/4]

template<int SYM>
void Operator::Elastic< SYM >::SetModel ( const Set::Field< Set::Matrix4< AMREX_SPACEDIM, SYM >> &  a_model)
inline

Definition at line 53 of file Elastic.H.

◆ SetModel() [3/4]

template<int SYM>
void Operator::Elastic< SYM >::SetModel ( int  amrlev,
const MultiTab a_model 
)

◆ SetModel() [4/4]

template<int SYM>
void Operator::Elastic< SYM >::SetModel ( Set::Matrix4< AMREX_SPACEDIM, SYM > &  a_model)

Definition at line 59 of file Elastic.cpp.

◆ SetPsi() [1/2]

template<int SYM>
void Operator::Elastic< SYM >::SetPsi ( int  amrlev,
const amrex::MultiFab &  a_psi 
)

Definition at line 126 of file Elastic.cpp.

◆ SetPsi() [2/2]

template<int SYM>
void Operator::Elastic< SYM >::SetPsi ( int  amrlev,
const amrex::MultiFab &  a_psi,
const Set::Scalar a_psi_small 
)
inline

Definition at line 56 of file Elastic.H.

◆ SetTesting()

template<int SYM>
void Operator::Elastic< SYM >::SetTesting ( bool  a_testing)
inline

Definition at line 108 of file Elastic.H.

◆ SetUniform()

template<int SYM>
void Operator::Elastic< SYM >::SetUniform ( bool  a_uniform)
inline

Definition at line 109 of file Elastic.H.

◆ Strain()

template<int SYM>
void Operator::Elastic< SYM >::Strain ( int  amrlev,
amrex::MultiFab &  epsfab,
const amrex::MultiFab &  ufab,
bool  voigt = false 
) const

Compute strain \(\mathbf{\epsilon}\) given the displacement field \(\mathbf{u}\) by

\[\mathbf{\epsilon}_{ij} = \frac{1}{2}(u_{i,j} + u_{j,i})\]

Definition at line 403 of file Elastic.cpp.

◆ Stress()

template<int SYM>
void Operator::Elastic< SYM >::Stress ( int  amrlev,
amrex::MultiFab &  sigmafab,
const amrex::MultiFab &  ufab,
bool  voigt = false,
bool  a_homogeneous = false 
)

Compute stress \(\mathbf{\sigma}\) given the displacement field \(\mathbf{u}\) by

\[\mathbf{\sigma}_{ij} = \mathbb{C}_{ijkl}\,u_{k,l}\]

where, \(\mathbb{C}\) is furnished by the templated model

Definition at line 464 of file Elastic.cpp.

Field Documentation

◆ m_average_down_coeffs

template<int SYM>
bool Operator::Elastic< SYM >::m_average_down_coeffs = false
private

Definition at line 178 of file Elastic.H.

◆ m_bc

template<int SYM>
::BC::Operator::Elastic::Elastic* Operator::Elastic< SYM >::m_bc
private

Definition at line 180 of file Elastic.H.

◆ m_bc_hi

template<int SYM>
std::array<std::array<BC,AMREX_SPACEDIM>, AMREX_SPACEDIM> Operator::Elastic< SYM >::m_bc_hi
private

Definition at line 139 of file Elastic.H.

◆ m_bc_lo

template<int SYM>
std::array<std::array<BC,AMREX_SPACEDIM>, AMREX_SPACEDIM> Operator::Elastic< SYM >::m_bc_lo
private

Simple arrays storing boundary conditions for each component and each face.

Definition at line 134 of file Elastic.H.

◆ m_bc_set

template<int SYM>
bool Operator::Elastic< SYM >::m_bc_set = false
private

Definition at line 183 of file Elastic.H.

◆ m_ddw_mf

template<int SYM>
amrex::Vector<Set::Field<Set::Matrix4<AMREX_SPACEDIM,SYM> > > Operator::Elastic< SYM >::m_ddw_mf
private

This is a multifab-type object containing objects of type Model::Solid::Elastic::Isotropic::Isotropic (or some other model type). T is the template argument. The models contain elastic constants and contain methods for converting strain to stress

Definition at line 145 of file Elastic.H.

◆ m_homogeneous

template<int SYM>
bool Operator::Elastic< SYM >::m_homogeneous = false
private

Definition at line 176 of file Elastic.H.

◆ m_model_set

template<int SYM>
bool Operator::Elastic< SYM >::m_model_set = false
private

Definition at line 182 of file Elastic.H.

◆ m_psi_mf

template<int SYM>
amrex::Vector<Set::Field<Set::Scalar> > Operator::Elastic< SYM >::m_psi_mf
private

Definition at line 148 of file Elastic.H.

◆ m_psi_set

template<int SYM>
bool Operator::Elastic< SYM >::m_psi_set = false
private

Definition at line 150 of file Elastic.H.

◆ m_psi_small

template<int SYM>
Set::Scalar Operator::Elastic< SYM >::m_psi_small = 1E-8
private

Definition at line 149 of file Elastic.H.

◆ m_testing

template<int SYM>
bool Operator::Elastic< SYM >::m_testing = false
private

Definition at line 174 of file Elastic.H.

◆ m_uniform

template<int SYM>
bool Operator::Elastic< SYM >::m_uniform = false
private

Definition at line 175 of file Elastic.H.


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