Line data Source code
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 "ComputeAxisymmetric1DFiniteStrain.h" 11 : #include "UserObject.h" 12 : 13 : registerMooseObject("TensorMechanicsApp", ComputeAxisymmetric1DFiniteStrain); 14 : 15 : InputParameters 16 40 : ComputeAxisymmetric1DFiniteStrain::validParams() 17 : { 18 40 : InputParameters params = Compute1DFiniteStrain::validParams(); 19 40 : params.addClassDescription("Compute a strain increment and rotation increment for finite strains " 20 : "in an axisymmetric 1D problem"); 21 80 : params.addParam<UserObjectName>("subblock_index_provider", 22 : "SubblockIndexProvider user object name"); 23 80 : params.addCoupledVar("scalar_out_of_plane_strain", "Scalar variable for axisymmetric 1D problem"); 24 80 : params.addCoupledVar("out_of_plane_strain", "Nonlinear variable for axisymmetric 1D problem"); 25 : 26 40 : return params; 27 0 : } 28 : 29 30 : ComputeAxisymmetric1DFiniteStrain::ComputeAxisymmetric1DFiniteStrain( 30 30 : const InputParameters & parameters) 31 : : Compute1DFiniteStrain(parameters), 32 30 : _disp_old_0(coupledValueOld("displacements", 0)), 33 30 : _subblock_id_provider(isParamValid("subblock_index_provider") 34 30 : ? &getUserObject<SubblockIndexProvider>("subblock_index_provider") 35 : : nullptr), 36 30 : _has_out_of_plane_strain(isCoupled("out_of_plane_strain")), 37 30 : _out_of_plane_strain(_has_out_of_plane_strain ? coupledValue("out_of_plane_strain") : _zero), 38 30 : _out_of_plane_strain_old(_has_out_of_plane_strain ? coupledValueOld("out_of_plane_strain") 39 : : _zero), 40 60 : _has_scalar_out_of_plane_strain(isCoupledScalar("scalar_out_of_plane_strain")) 41 : { 42 30 : if (_has_out_of_plane_strain && _has_scalar_out_of_plane_strain) 43 0 : mooseError("Must define only one of out_of_plane_strain or scalar_out_of_plane_strain"); 44 : 45 30 : if (_has_scalar_out_of_plane_strain) 46 : { 47 21 : const auto nscalar_strains = coupledScalarComponents("scalar_out_of_plane_strain"); 48 21 : _scalar_out_of_plane_strain.resize(nscalar_strains); 49 21 : _scalar_out_of_plane_strain_old.resize(nscalar_strains); 50 42 : for (unsigned int i = 0; i < nscalar_strains; ++i) 51 : { 52 21 : _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i); 53 21 : _scalar_out_of_plane_strain_old[i] = &coupledScalarValueOld("scalar_out_of_plane_strain", i); 54 : } 55 : } 56 30 : } 57 : 58 : void 59 30 : ComputeAxisymmetric1DFiniteStrain::initialSetup() 60 : { 61 30 : ComputeIncrementalStrainBase::initialSetup(); 62 : 63 30 : if (getBlockCoordSystem() != Moose::COORD_RZ) 64 0 : mooseError("The coordinate system must be set to RZ for Axisymmetric geometries."); 65 30 : } 66 : 67 : Real 68 6792 : ComputeAxisymmetric1DFiniteStrain::computeGradDispYY() 69 : { 70 6792 : if (_has_scalar_out_of_plane_strain) 71 5640 : return std::exp((*_scalar_out_of_plane_strain[getCurrentSubblockIndex()])[0]) - 1.0; 72 : else 73 1152 : return std::exp(_out_of_plane_strain[_qp]) - 1.0; 74 : } 75 : 76 : Real 77 6792 : ComputeAxisymmetric1DFiniteStrain::computeGradDispYYOld() 78 : { 79 6792 : if (_has_scalar_out_of_plane_strain) 80 5640 : return std::exp((*_scalar_out_of_plane_strain_old[getCurrentSubblockIndex()])[0]) - 1.0; 81 : else 82 1152 : return std::exp(_out_of_plane_strain_old[_qp]) - 1.0; 83 : } 84 : 85 : Real 86 6792 : ComputeAxisymmetric1DFiniteStrain::computeGradDispZZ() 87 : { 88 6792 : if (!MooseUtils::absoluteFuzzyEqual(_q_point[_qp](0), 0.0)) 89 6792 : return (*_disp[0])[_qp] / _q_point[_qp](0); 90 : else 91 : return 0.0; 92 : } 93 : 94 : Real 95 6792 : ComputeAxisymmetric1DFiniteStrain::computeGradDispZZOld() 96 : { 97 6792 : if (!MooseUtils::absoluteFuzzyEqual(_q_point[_qp](0), 0.0)) 98 6792 : return _disp_old_0[_qp] / _q_point[_qp](0); 99 : else 100 : return 0.0; 101 : }