www.mooseframework.org
ExternalForceDensityMaterial.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 #include "Function.h"
12 
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<Material>();
20  params.addClassDescription("Providing external applied force density to grains");
21  params.addParam<FunctionName>("force_x", 0.0, "The forcing function in x direction.");
22  params.addParam<FunctionName>("force_y", 0.0, "The forcing function in y direction.");
23  params.addParam<FunctionName>("force_z", 0.0, "The forcing function in z direction.");
24  params.addRequiredCoupledVarWithAutoBuild(
25  "etas", "var_name_base", "op_num", "Array of coupled order parameters");
26  params.addCoupledVar("c", "Concentration field");
27  params.addParam<Real>("k", 1.0, "stiffness constant multiplier");
28  return params;
29 }
30 
32  : DerivativeMaterialInterface<Material>(parameters),
33  _force_x(getFunction("force_x")),
34  _force_y(getFunction("force_y")),
35  _force_z(getFunction("force_z")),
36  _c(coupledValue("c")),
37  _c_name(getVar("c", 0)->name()),
38  _k(getParam<Real>("k")),
39  _op_num(coupledComponents(
40  "etas")), // determine number of grains from the number of names passed in.
41  _vals(_op_num), // Size variable arrays
42  _vals_name(_op_num),
43  _dF(declareProperty<std::vector<RealGradient>>("force_density_ext")),
44  _dFdc(declarePropertyDerivative<std::vector<RealGradient>>("force_density_ext", _c_name)),
45  _dFdeta(_op_num)
46 {
47  // Loop through grains and load coupled variables into the arrays
48  for (unsigned int i = 0; i < _op_num; ++i)
49  {
50  _vals[i] = &coupledValue("etas", i);
51  _vals_name[i] = getVar("etas", i)->name();
52  _dFdeta[i] =
53  &declarePropertyDerivative<std::vector<RealGradient>>("force_density_ext", _vals_name[i]);
54  }
55 }
56 
57 void
59 {
60  _dF[_qp].resize(_op_num);
61  _dFdc[_qp].resize(_op_num);
62 
63  for (unsigned int i = 0; i < _op_num; ++i)
64  {
65  _dF[_qp][i](0) = _k * _c[_qp] * _force_x.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
66  _dF[_qp][i](1) = _k * _c[_qp] * _force_y.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
67  _dF[_qp][i](2) = _k * _c[_qp] * _force_z.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
68 
69  _dFdc[_qp][i](0) = _k * _force_x.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
70  _dFdc[_qp][i](1) = _k * _force_y.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
71  _dFdc[_qp][i](2) = _k * _force_z.value(_t, _q_point[_qp]) * (*_vals[i])[_qp];
72  }
73 
74  for (unsigned int i = 0; i < _op_num; ++i)
75  {
76  (*_dFdeta[i])[_qp].resize(_op_num);
77  for (unsigned int j = 0; j < _op_num; ++j)
78  {
79  (*_dFdeta[i])[_qp][j](0) = _k * _c[_qp] * _force_x.value(_t, _q_point[_qp]);
80  (*_dFdeta[i])[_qp][j](1) = _k * _c[_qp] * _force_y.value(_t, _q_point[_qp]);
81  (*_dFdeta[i])[_qp][j](2) = _k * _c[_qp] * _force_z.value(_t, _q_point[_qp]);
82  }
83  }
84 }
ExternalForceDensityMaterial::_vals
std::vector< const VariableValue * > _vals
Definition: ExternalForceDensityMaterial.h:46
validParams< ExternalForceDensityMaterial >
InputParameters validParams< ExternalForceDensityMaterial >()
Definition: ExternalForceDensityMaterial.C:17
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
ExternalForceDensityMaterial::_dF
MaterialProperty< std::vector< RealGradient > > & _dF
force density material
Definition: ExternalForceDensityMaterial.h:50
ExternalForceDensityMaterial::_vals_name
std::vector< VariableName > _vals_name
Definition: ExternalForceDensityMaterial.h:47
ExternalForceDensityMaterial::_force_z
const Function & _force_z
Definition: ExternalForceDensityMaterial.h:37
ExternalForceDensityMaterial
This Material calculates the force density acting on a particle/grain due to interaction between part...
Definition: ExternalForceDensityMaterial.h:26
ExternalForceDensityMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: ExternalForceDensityMaterial.C:58
ExternalForceDensityMaterial::ExternalForceDensityMaterial
ExternalForceDensityMaterial(const InputParameters &parameters)
Definition: ExternalForceDensityMaterial.C:31
ExternalForceDensityMaterial::_op_num
unsigned int _op_num
Definition: ExternalForceDensityMaterial.h:45
ExternalForceDensityMaterial::_force_x
const Function & _force_x
Definition: ExternalForceDensityMaterial.h:35
name
const std::string name
Definition: Setup.h:21
ExternalForceDensityMaterial::_c
const VariableValue & _c
concentration field considered to be the density of particles
Definition: ExternalForceDensityMaterial.h:40
ExternalForceDensityMaterial::_k
const Real _k
stiffness constant
Definition: ExternalForceDensityMaterial.h:43
registerMooseObject
registerMooseObject("PhaseFieldApp", ExternalForceDensityMaterial)
ExternalForceDensityMaterial::_dFdc
MaterialProperty< std::vector< RealGradient > > & _dFdc
first order derivative of force density material w.r.t c
Definition: ExternalForceDensityMaterial.h:52
ExternalForceDensityMaterial::_dFdeta
std::vector< MaterialProperty< std::vector< RealGradient > > * > _dFdeta
Definition: ExternalForceDensityMaterial.h:54
ExternalForceDensityMaterial::_force_y
const Function & _force_y
Definition: ExternalForceDensityMaterial.h:36
ExternalForceDensityMaterial.h