17 #include "libmesh/quadrature.h" 35 params.
addParam<UserObjectName>(
"feature_counter",
36 "The FeatureFloodCount UserObject to get values from.");
40 "variable",
"var_name_base",
"op_num",
"Array of coupled variables");
41 params.
addParam<
unsigned int>(
"grain_num",
"number of grains to create");
49 _mesh(_subproblem.
mesh()),
50 _assembly(_subproblem.assembly(0, _sys.number())),
51 _q_point(_assembly.qPoints()),
52 _qrule(_assembly.qRule()),
53 _JxW(_assembly.JxW()),
54 _coord(_assembly.coordTransformation()),
55 _feature_counter(isParamValid(
"feature_counter")
64 if (num_coupled_vars != getParam<unsigned int>(
"grain_num"))
65 mooseError(
"The number of grains must match the number of OPs if a feature_counter is not " 78 mooseError(
"Must supply either a feature_counter object or coupled variables and grain_num");
83 _vals.reserve(coupled_vars.size());
85 for (
auto & coupled_var : coupled_vars)
86 _vals.emplace_back(&coupled_var->sln());
108 for (
const auto & elem :
_mesh.
getMesh().active_local_element_ptr_range())
113 const std::vector<unsigned int> & var_to_feature_ptr =
123 std::size_t libmesh_dbg_var(num_features))
125 for (MooseIndex(var_to_features) var_index = 0; var_index < var_to_features.size(); ++var_index)
130 auto feature_id = var_to_features[var_index];
131 mooseAssert(feature_id < num_features,
"Feature ID out of range");
144 for (
unsigned int qp = 0; qp <
_qrule->n_points(); ++qp)
159 Real total_volume = 0;
163 unsigned int active_features =
166 return total_volume / active_features;
std::vector< unsigned int > _static_var_to_feature
const QBase *const & _qrule
std::size_t getNumberActiveFeatures() const
Return the number of active features.
AverageGrainVolume(const InputParameters ¶meters)
virtual void execute() override
virtual void prepare(const Elem *elem, const THREAD_ID tid) override
Real computeIntegral(std::size_t var_index) const
virtual const std::vector< unsigned int > & getVarToFeatureVector(dof_id_type elem_id) const
Returns a list of active unique feature ids for a particular element.
const std::vector< MooseVariable * > & getCoupledVars() const
Returns a const vector to the coupled variable pointers.
virtual Real getValue() const override
virtual std::size_t getTotalFeatureCount() const
Returns the total feature count (active and inactive ids, useful for sizing vectors) ...
void accumulateVolumes(const std::vector< unsigned int > &var_to_features, std::size_t libmesh_dbg_var(num_features))
const MooseArray< Real > & _coord
bool isParamValid(const std::string &name) const
static InputParameters validParams()
std::vector< Real > _feature_volumes
const MooseArray< Real > & _JxW
virtual void initialize() override
virtual void reinitElem(const Elem *elem, const THREAD_ID tid) override
This object will mark nodes or elements of continuous regions all with a unique number for the purpos...
static const unsigned int invalid_id
unsigned int coupledComponents(const std::string &var_name) const
void addMooseVariableDependency(MooseVariableFieldBase *var)
std::vector< const VariableValue *> coupledValues(const std::string &var_name) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
FEProblemBase & _fe_problem
void mooseError(Args &&... args) const
virtual void finalize() override
MooseMesh & _mesh
A reference to the mesh.
const FeatureFloodCount *const _feature_counter
registerMooseObject("PhaseFieldApp", AverageGrainVolume)
Compute the average grain area in a polycrystal.
const std::vector< MooseVariableFEBase * > & getFECoupledVars() const
Returns a const vector to the coupled MooseVariableFEBase pointers.
std::vector< const VariableValue * > _vals
static InputParameters validParams()