https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
SwitchingFunctionConstraintLagrange Class Reference

SwitchingFunctionConstraintLagrange is a constraint kernel that acts on the lambda lagrange multiplier non-linear variables to enforce \( \sum_n h_i(\eta_i) - \epsilon\lambda \equiv 1 \). More...

#include <SwitchingFunctionConstraintLagrange.h>

Inheritance diagram for SwitchingFunctionConstraintLagrange:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 SwitchingFunctionConstraintLagrange (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual Real computeQpResidual ()
 
virtual Real computeQpJacobian ()
 
virtual Real computeQpOffDiagJacobian (unsigned int)
 

Protected Attributes

std::vector< MaterialPropertyName > _h_names
 Switching function names.
 
unsigned int _num_h
 number of switching functions
 
std::vector< const MaterialProperty< Real > * > _h
 Switching functions.
 
std::vector< std::vector< const MaterialProperty< Real > * > > _dh
 Switching function derivatives.
 
const JvarMap & _eta_map
 map for getting the "etas" index from jvar
 
Real _epsilon
 shift factor
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase_dmi_fe_problem
 

Detailed Description

SwitchingFunctionConstraintLagrange is a constraint kernel that acts on the lambda lagrange multiplier non-linear variables to enforce \( \sum_n h_i(\eta_i) - \epsilon\lambda \equiv 1 \).

Definition at line 22 of file SwitchingFunctionConstraintLagrange.h.

Constructor & Destructor Documentation

◆ SwitchingFunctionConstraintLagrange()

SwitchingFunctionConstraintLagrange::SwitchingFunctionConstraintLagrange ( const InputParameters parameters)

Definition at line 27 of file SwitchingFunctionConstraintLagrange.C.

30 _h_names(getParam<std::vector<MaterialPropertyName>>("h_names")),
31 _num_h(_h_names.size()),
32 _h(_num_h),
33 _dh(_num_h),
34 _eta_map(getParameterJvarMap("etas")),
35 _epsilon(getParam<Real>("epsilon"))
36{
37 // parameter check. We need exactly one eta per h
38 if (_num_h != coupledComponents("etas"))
39 paramError("etas", "Need to pass in as many etas as h_names");
40
41 // fetch switching functions (for the residual) and h derivatives (for the Jacobian)
42 for (std::size_t i = 0; i < _num_h; ++i)
43 {
44 _h[i] = &getMaterialPropertyByName<Real>(_h_names[i]);
45
46 _dh[i].resize(_num_h);
47 for (std::size_t j = 0; j < _num_h; ++j)
48 _dh[i][j] = &getMaterialPropertyDerivative<Real>(_h_names[i], coupledName("etas", j));
49 }
50}
std::vector< std::vector< const MaterialProperty< Real > * > > _dh
Switching function derivatives.
std::vector< const MaterialProperty< Real > * > _h
Switching functions.
unsigned int _num_h
number of switching functions
std::vector< MaterialPropertyName > _h_names
Switching function names.
const JvarMap & _eta_map
map for getting the "etas" index from jvar

Member Function Documentation

◆ computeQpJacobian()

Real SwitchingFunctionConstraintLagrange::computeQpJacobian ( )
protectedvirtual

Definition at line 63 of file SwitchingFunctionConstraintLagrange.C.

64{
65 return _test[_i][_qp] * -_epsilon * _phi[_j][_qp];
66}

◆ computeQpOffDiagJacobian()

Real SwitchingFunctionConstraintLagrange::computeQpOffDiagJacobian ( unsigned int  jvar)
protectedvirtual

Definition at line 69 of file SwitchingFunctionConstraintLagrange.C.

70{
71 auto eta = mapJvarToCvar(jvar, _eta_map);
72 if (eta >= 0)
73 {
74 Real g = 0.0;
75 for (std::size_t i = 0; i < _num_h; ++i)
76 g += (*_dh[i][eta])[_qp] * _phi[_j][_qp];
77 return g * _test[_i][_qp];
78 }
79
80 return 0.0;
81}
Point eta
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ computeQpResidual()

Real SwitchingFunctionConstraintLagrange::computeQpResidual ( )
protectedvirtual

Definition at line 53 of file SwitchingFunctionConstraintLagrange.C.

54{
55 Real g = -_epsilon * _u[_qp] - 1.0;
56 for (std::size_t i = 0; i < _num_h; ++i)
57 g += (*_h[i])[_qp];
58
59 return _test[_i][_qp] * g;
60}

◆ validParams()

InputParameters SwitchingFunctionConstraintLagrange::validParams ( )
static

Definition at line 15 of file SwitchingFunctionConstraintLagrange.C.

16{
18 params.addClassDescription("Lagrange multiplier kernel to constrain the sum of all switching "
19 "functions in a multiphase system. This kernel acts on the Lagrange "
20 "multiplier variable.");
21 params.addParam<std::vector<MaterialPropertyName>>("h_names", "Switching function materials");
22 params.addRequiredCoupledVar("etas", "eta order parameters");
23 params.addParam<Real>("epsilon", 1e-9, "Shift factor to avoid a zero pivot");
24 return params;
25}
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _dh

std::vector<std::vector<const MaterialProperty<Real> *> > SwitchingFunctionConstraintLagrange::_dh
protected

Switching function derivatives.

Definition at line 45 of file SwitchingFunctionConstraintLagrange.h.

Referenced by computeQpOffDiagJacobian(), and SwitchingFunctionConstraintLagrange().

◆ _epsilon

Real SwitchingFunctionConstraintLagrange::_epsilon
protected

shift factor

Definition at line 51 of file SwitchingFunctionConstraintLagrange.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _eta_map

const JvarMap& SwitchingFunctionConstraintLagrange::_eta_map
protected

map for getting the "etas" index from jvar

Definition at line 48 of file SwitchingFunctionConstraintLagrange.h.

Referenced by computeQpOffDiagJacobian().

◆ _h

std::vector<const MaterialProperty<Real> *> SwitchingFunctionConstraintLagrange::_h
protected

Switching functions.

Definition at line 42 of file SwitchingFunctionConstraintLagrange.h.

Referenced by computeQpResidual(), and SwitchingFunctionConstraintLagrange().

◆ _h_names

std::vector<MaterialPropertyName> SwitchingFunctionConstraintLagrange::_h_names
protected

Switching function names.

Definition at line 36 of file SwitchingFunctionConstraintLagrange.h.

Referenced by SwitchingFunctionConstraintLagrange().

◆ _num_h

unsigned int SwitchingFunctionConstraintLagrange::_num_h
protected

number of switching functions

Definition at line 39 of file SwitchingFunctionConstraintLagrange.h.

Referenced by computeQpOffDiagJacobian(), computeQpResidual(), and SwitchingFunctionConstraintLagrange().


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