www.mooseframework.org
GrainForceAndTorqueSum.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 "GrainForceAndTorqueSum.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<GeneralUserObject>();
19  params.addClassDescription("Userobject for summing forces and torques acting on a grain");
20  params.addParam<std::vector<UserObjectName>>(
21  "grain_forces",
22  "List of names of user objects that provides forces and torques applied to grains");
23  params.addParam<unsigned int>("grain_num", "Number of grains");
24  return params;
25 }
26 
27 GrainForceAndTorqueSum::GrainForceAndTorqueSum(const InputParameters & parameters)
29  GeneralUserObject(parameters),
30  _sum_objects(getParam<std::vector<UserObjectName>>("grain_forces")),
31  _num_forces(_sum_objects.size()),
32  _grain_num(getParam<unsigned int>("grain_num")),
33  _sum_forces(_num_forces),
34  _force_values(_grain_num),
35  _torque_values(_grain_num)
36 {
37  for (unsigned int i = 0; i < _num_forces; ++i)
38  _sum_forces[i] = &getUserObjectByName<GrainForceAndTorqueInterface>(_sum_objects[i]);
39 }
40 
41 void
43 {
44  for (unsigned int i = 0; i < _grain_num; ++i)
45  {
46  _force_values[i] = 0.0;
47  _torque_values[i] = 0.0;
48  for (unsigned int j = 0; j < _num_forces; ++j)
49  {
50  _force_values[i] += (_sum_forces[j]->getForceValues())[i];
51  _torque_values[i] += (_sum_forces[j]->getTorqueValues())[i];
52  }
53  }
54 
55  if (_fe_problem.currentlyComputingJacobian())
56  {
57  unsigned int total_dofs = _subproblem.es().n_dofs();
58  _c_jacobians.resize(6 * _grain_num * total_dofs, 0.0);
59  _eta_jacobians.resize(_grain_num);
60 
61  for (unsigned int i = 0; i < _c_jacobians.size(); ++i)
62  for (unsigned int j = 0; j < _num_forces; ++j)
64 
65  for (unsigned int i = 0; i < _grain_num; ++i)
66  {
67  _eta_jacobians[i].resize(6 * _grain_num * total_dofs, 0.0);
68  for (unsigned int j = 0; j < _eta_jacobians[i].size(); ++j)
69  for (unsigned int k = 0; k < _num_forces; ++k)
70  _eta_jacobians[i][j] += (_sum_forces[k]->getForceEtaJacobians())[i][j];
71  }
72  }
73 }
74 
75 const std::vector<RealGradient> &
77 {
78  return _force_values;
79 }
80 
81 const std::vector<RealGradient> &
83 {
84  return _torque_values;
85 }
86 
87 const std::vector<Real> &
89 {
90  return _c_jacobians;
91 }
92 
93 const std::vector<std::vector<Real>> &
95 {
96  return _eta_jacobians;
97 }
GrainForceAndTorqueSum::_sum_objects
std::vector< UserObjectName > _sum_objects
Vector of userobjects providing forces and torques acting on grains.
Definition: GrainForceAndTorqueSum.h:41
GrainForceAndTorqueSum::GrainForceAndTorqueSum
GrainForceAndTorqueSum(const InputParameters &parameters)
Definition: GrainForceAndTorqueSum.C:27
GrainForceAndTorqueSum::initialize
virtual void initialize()
Definition: GrainForceAndTorqueSum.C:42
GrainForceAndTorqueSum::getForceCJacobians
virtual const std::vector< Real > & getForceCJacobians() const
Definition: GrainForceAndTorqueSum.C:88
GrainForceAndTorqueSum::_grain_num
unsigned int _grain_num
Definition: GrainForceAndTorqueSum.h:44
GrainForceAndTorqueSum::_sum_forces
std::vector< const GrainForceAndTorqueInterface * > _sum_forces
Definition: GrainForceAndTorqueSum.h:46
GrainForceAndTorqueSum::getTorqueValues
virtual const std::vector< RealGradient > & getTorqueValues() const
Definition: GrainForceAndTorqueSum.C:82
GrainForceAndTorqueSum::_eta_jacobians
std::vector< std::vector< Real > > _eta_jacobians
Definition: GrainForceAndTorqueSum.h:52
GrainForceAndTorqueSum::_c_jacobians
std::vector< Real > _c_jacobians
Definition: GrainForceAndTorqueSum.h:51
GrainForceAndTorqueSum::getForceEtaJacobians
virtual const std::vector< std::vector< Real > > & getForceEtaJacobians() const
Definition: GrainForceAndTorqueSum.C:94
registerMooseObject
registerMooseObject("PhaseFieldApp", GrainForceAndTorqueSum)
GrainForceAndTorqueSum::_num_forces
unsigned int _num_forces
Total no. of userobjects that provides forces and torques acting on grains.
Definition: GrainForceAndTorqueSum.h:43
GrainForceAndTorqueSum.h
GrainForceAndTorqueSum::_force_values
std::vector< RealGradient > _force_values
providing grain forces, torques and their jacobians w. r. t c
Definition: GrainForceAndTorqueSum.h:49
GrainForceAndTorqueSum::_torque_values
std::vector< RealGradient > _torque_values
Definition: GrainForceAndTorqueSum.h:50
validParams< GrainForceAndTorqueSum >
InputParameters validParams< GrainForceAndTorqueSum >()
Definition: GrainForceAndTorqueSum.C:16
GrainForceAndTorqueInterface
This class provides interface for extracting the forces and torques computed in other UserObjects.
Definition: GrainForceAndTorqueInterface.h:24
GrainForceAndTorqueSum::getForceValues
virtual const std::vector< RealGradient > & getForceValues() const
Definition: GrainForceAndTorqueSum.C:76
GrainForceAndTorqueSum
This class is here to get the force and torque acting on a grain from different userobjects and sum t...
Definition: GrainForceAndTorqueSum.h:25