www.mooseframework.org
GrainAdvectionVelocity.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 "GrainAdvectionVelocity.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Material>();
19  params.addClassDescription(
20  "Calculation the advection velocity of grain due to rigid body translation and rotation");
21  params.addRequiredCoupledVarWithAutoBuild(
22  "etas", "var_name_base", "op_num", "Array of other coupled order parameters");
23  params.addCoupledVar("c", "Concentration field");
24  params.addParam<Real>(
25  "translation_constant", 500, "constant value characterizing grain translation");
26  params.addParam<Real>("rotation_constant", 1.0, "constant value characterizing grain rotation");
27  params.addParam<std::string>("base_name",
28  "Optional parameter that allows the user to define "
29  "type of force density under consideration");
30  params.addParam<UserObjectName>("grain_data",
31  "UserObject for getting the center of mass of grains");
32  params.addParam<UserObjectName>("grain_force",
33  "userobject for getting force and torque acting on grains");
34  params.addParam<VectorPostprocessorName>("grain_volumes",
35  "The feature volume VectorPostprocessorValue.");
36  return params;
37 }
38 
39 GrainAdvectionVelocity::GrainAdvectionVelocity(const InputParameters & parameters)
40  : DerivativeMaterialInterface<Material>(parameters),
41  _grain_tracker(getUserObject<GrainTrackerInterface>("grain_data")),
42  _grain_force_torque(getUserObject<GrainForceAndTorqueInterface>("grain_force")),
43  _grain_volumes(getVectorPostprocessorValue("grain_volumes", "feature_volumes")),
44  _grain_forces(_grain_force_torque.getForceValues()),
45  _grain_torques(_grain_force_torque.getTorqueValues()),
46  _mt(getParam<Real>("translation_constant")),
47  _mr(getParam<Real>("rotation_constant")),
48  _op_num(coupledComponents("etas")),
49  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
50  _velocity_advection(
51  declareProperty<std::vector<RealGradient>>(_base_name + "advection_velocity"))
52 {
53  mooseDeprecated("Use GrainAdvectionAux for visualizing advection velocities.");
54 }
55 
56 void
58 {
59  auto grain_num = _grain_tracker.getTotalFeatureCount();
60  const auto & op_to_grains = _grain_tracker.getVarToFeatureVector(_current_elem->id());
61 
62  _velocity_advection[_qp].resize(grain_num);
63 
64  for (unsigned int i = 0; i < _grain_volumes.size(); ++i)
65  {
66  mooseAssert(i < _grain_volumes.size(), "grain index is out of bounds");
67  const auto volume = _grain_volumes[i];
68  const auto centroid = _grain_tracker.getGrainCentroid(i);
69 
70  for (unsigned int j = 0; j < _op_num; ++j)
71  if (i == op_to_grains[j])
72  {
73  const RealGradient velocity_translation = _mt / volume * _grain_forces[i];
74  const RealGradient velocity_rotation =
75  _mr / volume * (_grain_torques[i].cross(_current_elem->centroid() - centroid));
76 
77  _velocity_advection[_qp][i] = velocity_translation + velocity_rotation;
78  }
79  }
80 }
GrainTrackerInterface
This class defines the interface for the GrainTracking objects.
Definition: GrainTrackerInterface.h:24
GrainAdvectionVelocity::_mt
const Real _mt
constant value corresponding to grain translation
Definition: GrainAdvectionVelocity.h:49
GrainAdvectionVelocity::_mr
const Real _mr
constant value corresponding to grain rotation
Definition: GrainAdvectionVelocity.h:51
registerMooseObject
registerMooseObject("PhaseFieldApp", GrainAdvectionVelocity)
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
validParams< GrainAdvectionVelocity >
InputParameters validParams< GrainAdvectionVelocity >()
Definition: GrainAdvectionVelocity.C:16
GrainAdvectionVelocity
This Material calculates the advection velocity, it's divergence and derivatives acting on a particle...
Definition: GrainAdvectionVelocity.h:27
GrainAdvectionVelocity.h
GrainTrackerInterface::getTotalFeatureCount
virtual std::size_t getTotalFeatureCount() const =0
Returns a number large enough to contain the largest ID for all grains in use.
GrainAdvectionVelocity::_grain_tracker
const GrainTrackerInterface & _grain_tracker
getting userobject for calculating grain centers and volumes
Definition: GrainAdvectionVelocity.h:36
GrainTrackerInterface::getVarToFeatureVector
virtual const std::vector< unsigned int > & getVarToFeatureVector(dof_id_type elem_id) const =0
Returns a list of active unique feature ids for a particular element.
GrainAdvectionVelocity::_velocity_advection
MaterialProperty< std::vector< RealGradient > > & _velocity_advection
Material storing advection velocities of grains.
Definition: GrainAdvectionVelocity.h:59
GrainAdvectionVelocity::_grain_volumes
const VectorPostprocessorValue & _grain_volumes
The grain volumes.
Definition: GrainAdvectionVelocity.h:42
GrainAdvectionVelocity::_grain_forces
const std::vector< RealGradient > & _grain_forces
Definition: GrainAdvectionVelocity.h:44
GrainAdvectionVelocity::computeQpProperties
virtual void computeQpProperties()
Definition: GrainAdvectionVelocity.C:57
GrainAdvectionVelocity::GrainAdvectionVelocity
GrainAdvectionVelocity(const InputParameters &parameters)
Definition: GrainAdvectionVelocity.C:39
GrainTrackerInterface::getGrainCentroid
virtual Point getGrainCentroid(unsigned int grain_id) const =0
Returns the centroid for the given grain number.
GrainAdvectionVelocity::_grain_torques
const std::vector< RealGradient > & _grain_torques
Definition: GrainAdvectionVelocity.h:45
GrainAdvectionVelocity::_op_num
const unsigned int _op_num
Definition: GrainAdvectionVelocity.h:53
GrainForceAndTorqueInterface
This class provides interface for extracting the forces and torques computed in other UserObjects.
Definition: GrainForceAndTorqueInterface.h:24