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