11 #include "MooseUtils.h"
19 InputParameters params = validParams<ElementIntegralPostprocessor>();
20 params.addClassDescription(
"Calculate total grain boundary length in 2D and area in 3D");
21 params.addRequiredCoupledVarWithAutoBuild(
22 "v",
"var_name_base",
"op_num",
"Array of coupled variables");
23 params.addParam<Real>(
"grains_per_side",
25 "Number of order parameters contacting a boundary "
26 "(should be 2.0 in polycrystals and 1.0 for "
27 "dispersed particles)");
28 params.addParam<Real>(
"op_range",
30 "Range over which order parameters change across an "
31 "interface. By default order parameters are assumed to "
37 : ElementIntegralPostprocessor(parameters),
38 _op_num(coupledComponents(
"v")),
40 _factor(getParam<Real>(
"grains_per_side") * getParam<Real>(
"op_range"))
43 if (MooseUtils::absoluteFuzzyEqual(
_factor, 0.0))
44 mooseError(
"Neither grains_per_side nor op_range may be zero.");
47 for (MooseIndex(
_op_num) op_index = 0; op_index <
_op_num; ++op_index)
48 _grads[op_index] = &coupledGradient(
"v", op_index);
56 grad_sum += (*grad)[_qp].norm();
63 return ElementIntegralPostprocessor::getValue() /
_factor;