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 "ComputeElasticityTensor.h" 11 : #include "RotationTensor.h" 12 : 13 : registerMooseObject("SolidMechanicsApp", ComputeElasticityTensor); 14 : registerMooseObject("SolidMechanicsApp", ADComputeElasticityTensor); 15 : 16 : template <bool is_ad> 17 : InputParameters 18 10794 : ComputeElasticityTensorTempl<is_ad>::validParams() 19 : { 20 10794 : InputParameters params = ComputeRotatedElasticityTensorBaseTempl<is_ad>::validParams(); 21 10794 : params.addClassDescription("Compute an elasticity tensor."); 22 21588 : params.addRequiredParam<std::vector<Real>>("C_ijkl", "Stiffness tensor for material"); 23 21588 : params.addParam<MooseEnum>( 24 21588 : "fill_method", RankFourTensor::fillMethodEnum() = "symmetric9", "The fill method"); 25 10794 : return params; 26 0 : } 27 : 28 : template <bool is_ad> 29 8088 : ComputeElasticityTensorTempl<is_ad>::ComputeElasticityTensorTempl( 30 : const InputParameters & parameters) 31 : : ComputeRotatedElasticityTensorBaseTempl<is_ad>(parameters), 32 24264 : _Cijkl(this->template getParam<std::vector<Real>>("C_ijkl"), 33 8088 : (RankFourTensor::FillMethod)(int)this->template getParam<MooseEnum>("fill_method")) 34 : { 35 16176 : if (!isParamValid("elasticity_tensor_prefactor")) 36 16176 : issueGuarantee(_elasticity_tensor_name, Guarantee::CONSTANT_IN_TIME); 37 : 38 8088 : if (_Cijkl.isIsotropic()) 39 12072 : issueGuarantee(_elasticity_tensor_name, Guarantee::ISOTROPIC); 40 : else 41 : { 42 : // Use user-provided rotation matrix if given 43 4104 : if (parameters.isParamValid("rotation_matrix")) 44 92 : _Cijkl.rotate(_rotation_matrix); 45 : else 46 : { 47 : // Define a rotation according to Euler angle parameters 48 1960 : RotationTensor R(_Euler_angles); // R type: RealTensorValue 49 : 50 : // rotate elasticity tensor 51 1960 : _Cijkl.rotate(R); 52 : } 53 : } 54 8088 : } 55 : 56 : template <bool is_ad> 57 : void 58 8906572 : ComputeElasticityTensorTempl<is_ad>::computeQpElasticityTensor() 59 : { 60 : // Assign elasticity tensor at a given quad point 61 8906572 : _elasticity_tensor[_qp] = _Cijkl; 62 8906572 : } 63 : 64 : template class ComputeElasticityTensorTempl<false>; 65 : template class ComputeElasticityTensorTempl<true>;