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