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