Line data Source code
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 : 10 : #include "ConstantGrainForceAndTorque.h" 11 : 12 : registerMooseObject("PhaseFieldApp", ConstantGrainForceAndTorque); 13 : 14 : InputParameters 15 148 : ConstantGrainForceAndTorque::validParams() 16 : { 17 148 : InputParameters params = GeneralUserObject::validParams(); 18 148 : params.addClassDescription("Userobject for calculating force and torque acting on a grain"); 19 296 : params.addParam<std::vector<Real>>("force", "force acting on grains"); 20 296 : params.addParam<std::vector<Real>>("torque", "torque acting on grains"); 21 148 : return params; 22 0 : } 23 : 24 148 : ConstantGrainForceAndTorque::ConstantGrainForceAndTorque(const InputParameters & parameters) 25 : : GrainForceAndTorqueInterface(), 26 : GeneralUserObject(parameters), 27 74 : _F(getParam<std::vector<Real>>("force")), 28 222 : _M(getParam<std::vector<Real>>("torque")), 29 74 : _grain_num(_F.size() / 3), 30 74 : _ncomp(6 * _grain_num), 31 74 : _force_values(_grain_num), 32 148 : _torque_values(_grain_num) 33 : { 34 74 : } 35 : 36 : void 37 986 : ConstantGrainForceAndTorque::initialize() 38 : { 39 986 : unsigned int total_dofs = _subproblem.es().n_dofs(); 40 2208 : for (unsigned int i = 0; i < _grain_num; ++i) 41 : { 42 1222 : _force_values[i](0) = _F[3 * i + 0]; 43 1222 : _force_values[i](1) = _F[3 * i + 1]; 44 1222 : _force_values[i](2) = _F[3 * i + 2]; 45 1222 : _torque_values[i](0) = _M[3 * i + 0]; 46 1222 : _torque_values[i](1) = _M[3 * i + 1]; 47 1222 : _torque_values[i](2) = _M[3 * i + 2]; 48 : } 49 : 50 986 : if (_fe_problem.currentlyComputingJacobian()) 51 : { 52 401 : _c_jacobians.assign(6 * _grain_num * total_dofs, 0.0); 53 401 : _eta_jacobians.resize(_grain_num); 54 907 : for (unsigned int i = 0; i < _grain_num; ++i) 55 506 : _eta_jacobians[i].assign(6 * _grain_num * total_dofs, 0.0); 56 : } 57 986 : } 58 : 59 : const std::vector<RealGradient> & 60 527 : ConstantGrainForceAndTorque::getForceValues() const 61 : { 62 527 : return _force_values; 63 : } 64 : 65 : const std::vector<RealGradient> & 66 602 : ConstantGrainForceAndTorque::getTorqueValues() const 67 : { 68 602 : return _torque_values; 69 : } 70 : 71 : const std::vector<Real> & 72 110285 : ConstantGrainForceAndTorque::getForceCJacobians() const 73 : { 74 110285 : return _c_jacobians; 75 : } 76 : 77 : const std::vector<std::vector<Real>> & 78 220445 : ConstantGrainForceAndTorque::getForceEtaJacobians() const 79 : { 80 220445 : return _eta_jacobians; 81 : }