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

This Material calculates the force density acting on a particle/grain due to interaction between particles. More...

#include <ForceDensityMaterial.h>

Inheritance diagram for ForceDensityMaterial:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ForceDensityMaterial (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 void computeQpProperties ()
 

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

const VariableValue_c
 concentration field considered to be the density of particles
 
VariableName _c_name
 
Real _ceq
 equilibrium density at the grain boundaries
 
Real _cgb
 thresold value for identifying grain boundaries
 
Real _k
 stiffness constant
 
const unsigned int _op_num
 
const std::vector< const VariableValue * > _vals
 
const std::vector< const VariableGradient * > _grad_vals
 
const std::vector< VariableName > _vals_name
 
std::vector< Real > _product_etas
 
std::vector< RealGradient > _sum_grad_etas
 
const std::string _base_name
 type of force density material
 
MaterialProperty< std::vector< RealGradient > > & _dF
 force density material
 
MaterialProperty< std::vector< RealGradient > > & _dFdc
 first order derivative of force density material w.r.t c
 
std::vector< MaterialProperty< std::vector< Real > > * > _dFdgradeta
 first order derivative of force density material w.r.t etas
 
FEProblemBase_dmi_fe_problem
 

Detailed Description

This Material calculates the force density acting on a particle/grain due to interaction between particles.

Definition at line 21 of file ForceDensityMaterial.h.

Constructor & Destructor Documentation

◆ ForceDensityMaterial()

ForceDensityMaterial::ForceDensityMaterial ( const InputParameters parameters)

Definition at line 27 of file ForceDensityMaterial.C.

29 _c(coupledValue("c")),
30 _c_name(coupledName("c", 0)),
31 _ceq(getParam<Real>("ceq")),
32 _cgb(getParam<Real>("cgb")),
33 _k(getParam<Real>("k")),
34 _op_num(coupledComponents(
35 "etas")), // determine number of grains from the number of names passed in.
36 _vals(coupledValues("etas")),
37 _grad_vals(coupledGradients("etas")),
38 _vals_name(coupledNames("etas")),
41 _dF(declareProperty<std::vector<RealGradient>>("force_density")),
42 _dFdc(declarePropertyDerivative<std::vector<RealGradient>>("force_density", _c_name)),
44{
45 // Loop through grains and load derivatives
46 for (unsigned int i = 0; i < _op_num; ++i)
47 if (!isCoupledConstant(_vals_name[i]))
48 _dFdgradeta[i] =
49 &declarePropertyDerivative<std::vector<Real>>("force_density", _vals_name[i]);
50}
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative(const std::string &base, const std::vector< VariableName > &c)
const VariableValue & _c
concentration field considered to be the density of particles
Real _cgb
thresold value for identifying grain boundaries
std::vector< RealGradient > _sum_grad_etas
Real _ceq
equilibrium density at the grain boundaries
const std::vector< VariableName > _vals_name
MaterialProperty< std::vector< RealGradient > > & _dF
force density material
std::vector< Real > _product_etas
Real _k
stiffness constant
const std::vector< const VariableValue * > _vals
const std::vector< const VariableGradient * > _grad_vals
MaterialProperty< std::vector< RealGradient > > & _dFdc
first order derivative of force density material w.r.t c
std::vector< MaterialProperty< std::vector< Real > > * > _dFdgradeta
first order derivative of force density material w.r.t etas
const unsigned int _op_num

Member Function Documentation

◆ computeQpProperties()

void ForceDensityMaterial::computeQpProperties ( )
protectedvirtual

Definition at line 53 of file ForceDensityMaterial.C.

54{
55 _dF[_qp].resize(_op_num);
56 _dFdc[_qp].resize(_op_num);
57
58 for (unsigned int i = 0; i < _op_num; ++i)
59 {
60 _sum_grad_etas[i] = 0.0;
61 for (unsigned int j = 0; j < _op_num; ++j)
62 if (j != i)
63 {
64 _product_etas[i] = (*_vals[i])[_qp] * (*_vals[j])[_qp] >= _cgb ? 1.0 : 0.0;
65 _sum_grad_etas[i] += _product_etas[i] * ((*_grad_vals[i])[_qp] - (*_grad_vals[j])[_qp]);
66 }
67 _dF[_qp][i] = _k * (_c[_qp] - _ceq) * _sum_grad_etas[i];
68 _dFdc[_qp][i] = _k * _sum_grad_etas[i];
69 }
70
71 for (unsigned int i = 0; i < _op_num; ++i)
72 {
73 if (_dFdgradeta[i])
74 (*_dFdgradeta[i])[_qp].resize(_op_num);
75 for (unsigned int j = 0; j < _op_num; ++j)
76 {
77 for (unsigned int k = 0; k < _op_num; ++k)
78 if (k != j)
79 _product_etas[j] = (*_vals[j])[_qp] * (*_vals[k])[_qp] >= _cgb ? 1.0 : 0.0;
80
81 if (_dFdgradeta[i])
82 {
83 if (j == i)
84 (*_dFdgradeta[i])[_qp][j] = _k * _product_etas[j] * (_c[_qp] - _ceq);
85 else
86 (*_dFdgradeta[i])[_qp][j] = -_k * _product_etas[j] * (_c[_qp] - _ceq);
87 }
88 }
89 }
90}
virtual void resize(const std::size_t size) override final

◆ validParams()

InputParameters ForceDensityMaterial::validParams ( )
static

Definition at line 15 of file ForceDensityMaterial.C.

16{
18 params.addClassDescription("Calculating the force density acting on a grain");
19 params.addCoupledVar("etas", "Array of coupled order parameters");
20 params.addCoupledVar("c", "Concentration field");
21 params.addParam<Real>("ceq", 0.9816, "Equilibrium density");
22 params.addParam<Real>("cgb", 0.25, "Threshold Concentration for GB");
23 params.addParam<Real>("k", 100.0, "stiffness constant");
24 return params;
25}
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)
void addCoupledVar(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Member Data Documentation

◆ _base_name

const std::string ForceDensityMaterial::_base_name
private

type of force density material

Definition at line 51 of file ForceDensityMaterial.h.

◆ _c

const VariableValue& ForceDensityMaterial::_c
private

concentration field considered to be the density of particles

Definition at line 33 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _c_name

VariableName ForceDensityMaterial::_c_name
private

Definition at line 34 of file ForceDensityMaterial.h.

◆ _ceq

Real ForceDensityMaterial::_ceq
private

equilibrium density at the grain boundaries

Definition at line 36 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _cgb

Real ForceDensityMaterial::_cgb
private

thresold value for identifying grain boundaries

Definition at line 38 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _dF

MaterialProperty<std::vector<RealGradient> >& ForceDensityMaterial::_dF
private

force density material

Definition at line 54 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _dFdc

MaterialProperty<std::vector<RealGradient> >& ForceDensityMaterial::_dFdc
private

first order derivative of force density material w.r.t c

Definition at line 56 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _dFdgradeta

std::vector<MaterialProperty<std::vector<Real> > *> ForceDensityMaterial::_dFdgradeta
private

first order derivative of force density material w.r.t etas

Definition at line 58 of file ForceDensityMaterial.h.

Referenced by computeQpProperties(), and ForceDensityMaterial().

◆ _grad_vals

const std::vector<const VariableGradient *> ForceDensityMaterial::_grad_vals
private

Definition at line 44 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _k

Real ForceDensityMaterial::_k
private

stiffness constant

Definition at line 40 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _op_num

const unsigned int ForceDensityMaterial::_op_num
private

Definition at line 42 of file ForceDensityMaterial.h.

Referenced by computeQpProperties(), and ForceDensityMaterial().

◆ _product_etas

std::vector<Real> ForceDensityMaterial::_product_etas
private

Definition at line 47 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _sum_grad_etas

std::vector<RealGradient> ForceDensityMaterial::_sum_grad_etas
private

Definition at line 48 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _vals

const std::vector<const VariableValue *> ForceDensityMaterial::_vals
private

Definition at line 43 of file ForceDensityMaterial.h.

Referenced by computeQpProperties().

◆ _vals_name

const std::vector<VariableName> ForceDensityMaterial::_vals_name
private

Definition at line 45 of file ForceDensityMaterial.h.

Referenced by ForceDensityMaterial().


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