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 100 : MaterialTensorAverageTempl<is_ad>::validParams() 18 : { 19 100 : InputParameters params = MaterialTensorIntegralTempl<is_ad>::validParams(); 20 100 : params.addClassDescription("Computes the average of a RankTwoTensor component over a volume."); 21 100 : return params; 22 0 : } 23 : 24 : template <bool is_ad> 25 50 : MaterialTensorAverageTempl<is_ad>::MaterialTensorAverageTempl(const InputParameters & parameters) 26 50 : : MaterialTensorIntegralTempl<is_ad>(parameters), _volume(0.0) 27 : { 28 50 : } 29 : 30 : template <bool is_ad> 31 : void 32 244 : MaterialTensorAverageTempl<is_ad>::initialize() 33 : { 34 244 : MaterialTensorIntegralTempl<is_ad>::initialize(); 35 : 36 244 : _volume = 0.0; 37 244 : } 38 : 39 : template <bool is_ad> 40 : void 41 184 : MaterialTensorAverageTempl<is_ad>::execute() 42 : { 43 184 : MaterialTensorIntegralTempl<is_ad>::execute(); 44 : 45 184 : _volume += this->_current_elem_volume; 46 184 : } 47 : 48 : template <bool is_ad> 49 : Real 50 244 : MaterialTensorAverageTempl<is_ad>::getValue() const 51 : { 52 244 : return _integral_value / _volume; 53 : } 54 : 55 : template <bool is_ad> 56 : void 57 244 : MaterialTensorAverageTempl<is_ad>::finalize() 58 : { 59 244 : MaterialTensorIntegralTempl<is_ad>::gatherSum(_volume); 60 244 : MaterialTensorIntegralTempl<is_ad>::gatherSum(_integral_value); 61 244 : } 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>;