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 "PorousFlowDiffusivityMillingtonQuirk.h" 11 : 12 : registerMooseObject("PorousFlowApp", PorousFlowDiffusivityMillingtonQuirk); 13 : registerMooseObject("PorousFlowApp", ADPorousFlowDiffusivityMillingtonQuirk); 14 : 15 : template <bool is_ad> 16 : InputParameters 17 27 : PorousFlowDiffusivityMillingtonQuirkTempl<is_ad>::validParams() 18 : { 19 27 : InputParameters params = PorousFlowDiffusivityBaseTempl<is_ad>::validParams(); 20 27 : params.addClassDescription( 21 : "This Material provides saturation-dependent diffusivity using the Millington-Quirk model"); 22 27 : return params; 23 0 : } 24 : 25 : template <bool is_ad> 26 21 : PorousFlowDiffusivityMillingtonQuirkTempl<is_ad>::PorousFlowDiffusivityMillingtonQuirkTempl( 27 : const InputParameters & parameters) 28 : : PorousFlowDiffusivityBaseTempl<is_ad>(parameters), 29 21 : _porosity_qp(this->template getGenericMaterialProperty<Real, is_ad>("PorousFlow_porosity_qp")), 30 21 : _dporosity_qp_dvar(is_ad ? nullptr 31 21 : : &this->template getMaterialProperty<std::vector<Real>>( 32 : "dPorousFlow_porosity_qp_dvar")), 33 21 : _saturation_qp(this->template getGenericMaterialProperty<std::vector<Real>, is_ad>( 34 : "PorousFlow_saturation_qp")), 35 21 : _dsaturation_qp_dvar(is_ad 36 : ? nullptr 37 21 : : &this->template getMaterialProperty<std::vector<std::vector<Real>>>( 38 21 : "dPorousFlow_saturation_qp_dvar")) 39 : { 40 21 : } 41 : 42 : template <bool is_ad> 43 : void 44 1008 : PorousFlowDiffusivityMillingtonQuirkTempl<is_ad>::computeQpProperties() 45 : { 46 1008 : PorousFlowDiffusivityBaseTempl<is_ad>::computeQpProperties(); 47 : 48 : using std::cbrt, std::pow; 49 : 50 3024 : for (unsigned int ph = 0; ph < _num_phases; ++ph) 51 : { 52 2016 : _tortuosity[_qp][ph] = cbrt(_porosity_qp[_qp]) * pow(_saturation_qp[_qp][ph], 10.0 / 3.0); 53 : 54 : if (!is_ad) 55 6048 : for (unsigned int var = 0; var < _num_var; ++var) 56 4032 : (*_dtortuosity_dvar)[_qp][ph][var] = MetaPhysicL::raw_value( 57 4032 : 1.0 / 3.0 * cbrt(_porosity_qp[_qp]) * pow(_saturation_qp[_qp][ph], 7.0 / 3.0) * 58 4032 : (_saturation_qp[_qp][ph] / _porosity_qp[_qp] * (*_dporosity_qp_dvar)[_qp][var] + 59 4032 : 10.0 * (*_dsaturation_qp_dvar)[_qp][ph][var])); 60 : } 61 1008 : } 62 : 63 : template class PorousFlowDiffusivityMillingtonQuirkTempl<false>; 64 : template class PorousFlowDiffusivityMillingtonQuirkTempl<true>;