www.mooseframework.org
GrainAdvectionAux.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 "GrainAdvectionAux.h"
11 
12 registerMooseObject("PhaseFieldApp", GrainAdvectionAux);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<AuxKernel>();
19  params.addClassDescription(
20  "Calculates the advection velocity of grain due to rigid body translation and rotation");
21  params.addParam<Real>(
22  "translation_constant", 1.0, "constant value characterizing grain translation");
23  params.addParam<Real>("rotation_constant", 1.0, "constant value characterizing grain rotation");
24  params.addParam<UserObjectName>("grain_tracker_object",
25  "userobject for getting volume and center of mass of grains");
26  params.addParam<VectorPostprocessorName>("grain_volumes",
27  "The feature volume VectorPostprocessorValue.");
28  params.addParam<UserObjectName>("grain_force",
29  "userobject for getting force and torque acting on grains");
30  MooseEnum component("x=0 y=1 z=2");
31  params.addParam<MooseEnum>("component", component, "The gradient component to compute");
32  return params;
33 }
34 
35 GrainAdvectionAux::GrainAdvectionAux(const InputParameters & parameters)
36  : AuxKernel(parameters),
37  _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker_object")),
38  _grain_volumes(getVectorPostprocessorValue("grain_volumes", "feature_volumes")),
39  _grain_force_torque(getUserObject<GrainForceAndTorqueInterface>("grain_force")),
40  _grain_forces(_grain_force_torque.getForceValues()),
41  _grain_torques(_grain_force_torque.getTorqueValues()),
42  _mt(getParam<Real>("translation_constant")),
43  _mr(getParam<Real>("rotation_constant")),
44  _component(getParam<MooseEnum>("component"))
45 {
46  if (isNodal())
47  mooseError("Advection velocity can be assigned to elemental variables only.");
48 }
49 
50 void
52 {
53  // ID of unique grain at current point
54  const auto grain_id = _grain_tracker.getEntityValue(
55  _current_elem->id(), FeatureFloodCount::FieldType::UNIQUE_REGION, 0);
56  if (grain_id >= 0)
57  {
58  mooseAssert(grain_id < _grain_volumes.size(), "grain index is out of bounds");
59  const auto volume = _grain_volumes[grain_id];
60  const auto centroid = _grain_tracker.getGrainCentroid(grain_id);
61 
62  const RealGradient velocity_translation = _mt / volume * _grain_forces[grain_id];
63  const RealGradient velocity_rotation =
64  _mr / volume * (_grain_torques[grain_id].cross(_current_elem->centroid() - centroid));
65  _velocity_advection = velocity_translation + velocity_rotation;
66  }
67  else
68  _velocity_advection.zero();
69 }
70 
71 Real
73 {
75 }
GrainAdvectionAux::_grain_forces
const std::vector< RealGradient > & _grain_forces
Definition: GrainAdvectionAux.h:45
GrainTrackerInterface
This class defines the interface for the GrainTracking objects.
Definition: GrainTrackerInterface.h:24
FeatureFloodCount::FieldType::UNIQUE_REGION
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
GrainAdvectionAux::_component
MooseEnum _component
Definition: GrainAdvectionAux.h:56
validParams< GrainAdvectionAux >
InputParameters validParams< GrainAdvectionAux >()
Definition: GrainAdvectionAux.C:16
GrainAdvectionAux::_mt
const Real _mt
constant value corresponding to grain translation
Definition: GrainAdvectionAux.h:50
GrainAdvectionAux::_grain_volumes
const VectorPostprocessorValue & _grain_volumes
The grain volumes.
Definition: GrainAdvectionAux.h:41
GrainAdvectionAux.h
GrainAdvectionAux::precalculateValue
virtual void precalculateValue()
calculate the advection velocity
Definition: GrainAdvectionAux.C:51
GrainAdvectionAux
Calculates the advection velocity of grain due to rigid body motion Reports the components of the vel...
Definition: GrainAdvectionAux.h:26
GrainAdvectionAux::_grain_tracker
const GrainTrackerInterface & _grain_tracker
getting userobject for calculating grain centers and volumes
Definition: GrainAdvectionAux.h:38
MaterialTensorCalculatorTools::component
Real component(const SymmTensor &symm_tensor, unsigned int index)
Definition: MaterialTensorCalculatorTools.C:16
GrainAdvectionAux::_velocity_advection
RealGradient _velocity_advection
Definition: GrainAdvectionAux.h:55
GrainTrackerInterface::getEntityValue
virtual Real getEntityValue(dof_id_type entity_id, FeatureFloodCount::FieldType, std::size_t var_index=0) const =0
Accessor for retrieving either nodal or elemental information (unique grains or variable indicies)
registerMooseObject
registerMooseObject("PhaseFieldApp", GrainAdvectionAux)
GrainAdvectionAux::computeValue
virtual Real computeValue()
output the component of advection velocity
Definition: GrainAdvectionAux.C:72
GrainAdvectionAux::_mr
const Real _mr
constant value corresponding to grain rotation
Definition: GrainAdvectionAux.h:53
GrainTrackerInterface::getGrainCentroid
virtual Point getGrainCentroid(unsigned int grain_id) const =0
Returns the centroid for the given grain number.
GrainAdvectionAux::GrainAdvectionAux
GrainAdvectionAux(const InputParameters &parameters)
Definition: GrainAdvectionAux.C:35
GrainAdvectionAux::_grain_torques
const std::vector< RealGradient > & _grain_torques
Definition: GrainAdvectionAux.h:46
GrainForceAndTorqueInterface
This class provides interface for extracting the forces and torques computed in other UserObjects.
Definition: GrainForceAndTorqueInterface.h:24