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 "MaterialTensorAverage.h" 11 : 12 : registerMooseObject("SolidMechanicsApp", MaterialTensorAverage); 13 : registerMooseObject("SolidMechanicsApp", ADMaterialTensorAverage); 14 : 15 : template <bool is_ad> 16 : InputParameters 17 88 : MaterialTensorAverageTempl<is_ad>::validParams() 18 : { 19 88 : InputParameters params = MaterialTensorIntegralTempl<is_ad>::validParams(); 20 88 : params.addClassDescription("Computes the average of a RankTwoTensor component over a volume."); 21 88 : return params; 22 0 : } 23 : 24 : template <bool is_ad> 25 44 : MaterialTensorAverageTempl<is_ad>::MaterialTensorAverageTempl(const InputParameters & parameters) 26 44 : : MaterialTensorIntegralTempl<is_ad>(parameters), _volume(0.0) 27 : { 28 44 : } 29 : 30 : template <bool is_ad> 31 : void 32 212 : MaterialTensorAverageTempl<is_ad>::initialize() 33 : { 34 212 : MaterialTensorIntegralTempl<is_ad>::initialize(); 35 : 36 212 : _volume = 0.0; 37 212 : } 38 : 39 : template <bool is_ad> 40 : void 41 152 : MaterialTensorAverageTempl<is_ad>::execute() 42 : { 43 152 : MaterialTensorIntegralTempl<is_ad>::execute(); 44 : 45 152 : _volume += this->_current_elem_volume; 46 152 : } 47 : 48 : template <bool is_ad> 49 : Real 50 212 : MaterialTensorAverageTempl<is_ad>::getValue() const 51 : { 52 212 : return _integral_value / _volume; 53 : } 54 : 55 : template <bool is_ad> 56 : void 57 212 : MaterialTensorAverageTempl<is_ad>::finalize() 58 : { 59 212 : MaterialTensorIntegralTempl<is_ad>::gatherSum(_volume); 60 212 : MaterialTensorIntegralTempl<is_ad>::gatherSum(_integral_value); 61 212 : } 62 : 63 : template <bool is_ad> 64 : void 65 0 : MaterialTensorAverageTempl<is_ad>::threadJoin(const UserObject & y) 66 : { 67 0 : MaterialTensorIntegralTempl<is_ad>::threadJoin(y); 68 : 69 : const auto & pps = static_cast<const MaterialTensorAverageTempl<is_ad> &>(y); 70 0 : _volume += pps._volume; 71 0 : } 72 : 73 : template class MaterialTensorAverageTempl<false>; 74 : template class MaterialTensorAverageTempl<true>;