www.mooseframework.org
GrainBoundaryArea.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 
10 #include "GrainBoundaryArea.h"
11 #include "MooseUtils.h"
12 
13 registerMooseObject("PhaseFieldApp", GrainBoundaryArea);
14 
17 {
19  params.addClassDescription("Calculate total grain boundary length in 2D and area in 3D");
21  "v", "var_name_base", "op_num", "Array of coupled variables");
22  params.addParam<Real>("grains_per_side",
23  2.0,
24  "Number of order parameters contacting a boundary "
25  "(should be 2.0 in polycrystals and 1.0 for "
26  "dispersed particles)");
27  params.addParam<Real>("op_range",
28  1.0,
29  "Range over which order parameters change across an "
30  "interface. By default order parameters are assumed to "
31  "vary from 0 to 1");
32  return params;
33 }
34 
36  : ElementIntegralPostprocessor(parameters),
37  _op_num(coupledComponents("v")),
38  _grads(_op_num),
39  _factor(getParam<Real>("grains_per_side") * getParam<Real>("op_range"))
40 {
41  // make sure user input is valid
43  mooseError("Neither grains_per_side nor op_range may be zero.");
44 
45  // Loop over variables (ops)
46  for (MooseIndex(_op_num) op_index = 0; op_index < _op_num; ++op_index)
47  _grads[op_index] = &coupledGradient("v", op_index);
48 }
49 
50 Real
52 {
53  Real grad_sum = 0.0;
54  for (auto grad : _grads)
55  grad_sum += (*grad)[_qp].norm();
56  return grad_sum;
57 }
58 
59 Real
61 {
63 }
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
std::vector< const VariableGradient * > _grads
Order parameters.
const unsigned int _op_num
Number of order parameters.
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
GrainBoundaryArea(const InputParameters &parameters)
static InputParameters validParams()
registerMooseObject("PhaseFieldApp", GrainBoundaryArea)
virtual Real getValue() const override
const Real _factor
normalization factor, depending on order parameter range and grains per side
virtual Real getValue() const override
std::string grad(const std::string &var)
Definition: NS.h:89
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addRequiredCoupledVarWithAutoBuild(const std::string &name, const std::string &base_name, const std::string &num_name, const std::string &doc_string)
virtual Real computeQpIntegral() override
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
Calculate total grain boundary length in 2D and area in 3D.