https://mooseframework.inl.gov
Loading...
Searching...
No Matches
GrainBoundaryArea.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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
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
42 if (MooseUtils::absoluteFuzzyEqual(_factor, 0.0))
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
50Real
52{
53 Real grad_sum = 0.0;
54 for (auto grad : _grads)
55 grad_sum += (*grad)[_qp].norm();
56 return grad_sum;
57}
58
59Real
registerMooseObject("PhaseFieldApp", GrainBoundaryArea)
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
virtual Real getValue() const override
static InputParameters validParams()
Calculate total grain boundary length in 2D and area in 3D.
static InputParameters validParams()
virtual Real computeQpIntegral() override
const unsigned int _op_num
Number of order parameters.
virtual Real getValue() const override
GrainBoundaryArea(const InputParameters &parameters)
const Real _factor
normalization factor, depending on order parameter range and grains per side
std::vector< const VariableGradient * > _grads
Order parameters.
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 addRequiredCoupledVarWithAutoBuild(const std::string &name, const std::string &base_name, const std::string &num_name, const std::string &doc_string)
void mooseError(Args &&... args) const