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 96 : ConstantGrainForceAndTorque::validParams() 16 : { 17 96 : InputParameters params = GeneralUserObject::validParams(); 18 96 : params.addClassDescription("Userobject for calculating force and torque acting on a grain"); 19 192 : params.addParam<std::vector<Real>>("force", "force acting on grains"); 20 192 : params.addParam<std::vector<Real>>("torque", "torque acting on grains"); 21 96 : return params; 22 0 : } 23 : 24 96 : ConstantGrainForceAndTorque::ConstantGrainForceAndTorque(const InputParameters & parameters) 25 : : GrainForceAndTorqueInterface(), 26 : GeneralUserObject(parameters), 27 48 : _F(getParam<std::vector<Real>>("force")), 28 144 : _M(getParam<std::vector<Real>>("torque")), 29 48 : _grain_num(_F.size() / 3), 30 48 : _ncomp(6 * _grain_num), 31 48 : _force_values(_grain_num), 32 96 : _torque_values(_grain_num) 33 : { 34 48 : } 35 : 36 : void 37 746 : ConstantGrainForceAndTorque::initialize() 38 : { 39 746 : unsigned int total_dofs = _subproblem.es().n_dofs(); 40 1674 : for (unsigned int i = 0; i < _grain_num; ++i) 41 : { 42 928 : _force_values[i](0) = _F[3 * i + 0]; 43 928 : _force_values[i](1) = _F[3 * i + 1]; 44 928 : _force_values[i](2) = _F[3 * i + 2]; 45 928 : _torque_values[i](0) = _M[3 * i + 0]; 46 928 : _torque_values[i](1) = _M[3 * i + 1]; 47 928 : _torque_values[i](2) = _M[3 * i + 2]; 48 : } 49 : 50 746 : if (_fe_problem.currentlyComputingJacobian()) 51 : { 52 303 : _c_jacobians.assign(6 * _grain_num * total_dofs, 0.0); 53 303 : _eta_jacobians.resize(_grain_num); 54 687 : for (unsigned int i = 0; i < _grain_num; ++i) 55 384 : _eta_jacobians[i].assign(6 * _grain_num * total_dofs, 0.0); 56 : } 57 746 : } 58 : 59 : const std::vector<RealGradient> & 60 377 : ConstantGrainForceAndTorque::getForceValues() const 61 : { 62 377 : return _force_values; 63 : } 64 : 65 : const std::vector<RealGradient> & 66 434 : ConstantGrainForceAndTorque::getTorqueValues() const 67 : { 68 434 : return _torque_values; 69 : } 70 : 71 : const std::vector<Real> & 72 84325 : ConstantGrainForceAndTorque::getForceCJacobians() const 73 : { 74 84325 : return _c_jacobians; 75 : } 76 : 77 : const std::vector<std::vector<Real>> & 78 168565 : ConstantGrainForceAndTorque::getForceEtaJacobians() const 79 : { 80 168565 : return _eta_jacobians; 81 : }