diff --git a/framework/include/kernels/ArrayDiffusion.h b/framework/include/kernels/ArrayDiffusion.h index 2ea82b50b498..071382a8c2d1 100644 --- a/framework/include/kernels/ArrayDiffusion.h +++ b/framework/include/kernels/ArrayDiffusion.h @@ -26,8 +26,6 @@ class ArrayDiffusion : public ArrayKernel virtual RealEigenVector computeQpJacobian() override; virtual RealEigenMatrix computeQpOffDiagJacobian(MooseVariableFEBase & jvar) override; - /// diffusion coefficient type - unsigned int _dc_type; /// scalar diffusion coefficient const MaterialProperty * _d; /// array diffusion coefficient diff --git a/framework/include/kernels/ArrayReaction.h b/framework/include/kernels/ArrayReaction.h index 6929a5dff046..b035b4fc2421 100644 --- a/framework/include/kernels/ArrayReaction.h +++ b/framework/include/kernels/ArrayReaction.h @@ -26,8 +26,6 @@ class ArrayReaction : public ArrayKernel virtual RealEigenVector computeQpJacobian() override; virtual RealEigenMatrix computeQpOffDiagJacobian(MooseVariableFEBase & jvar) override; - /// diffusion coefficient type - unsigned int _r_type; /// scalar diffusion coefficient const MaterialProperty * _r; /// array diffusion coefficient diff --git a/framework/src/kernels/ArrayDiffusion.C b/framework/src/kernels/ArrayDiffusion.C index af1de3a825a6..65ac1e037133 100644 --- a/framework/src/kernels/ArrayDiffusion.C +++ b/framework/src/kernels/ArrayDiffusion.C @@ -16,9 +16,8 @@ InputParameters validParams() { InputParameters params = validParams(); - params.addParam("diffusion_coefficient", "The name of the diffusivity"); - MooseEnum opt("scalar=0 array=1 full=2", "array"); - params.addParam("diffusion_coefficient_type", opt, "Diffusion coefficient type"); + params.addParam("diffusion_coefficient", "The name of the diffusivity, " + "can be scalar, vector, or matrix."); params.addClassDescription( "The array Laplacian operator ($-\\nabla \\cdot \\nabla u$), with the weak " "form of $(\\nabla \\phi_i, \\nabla u_h)$."); @@ -26,32 +25,33 @@ validParams() } ArrayDiffusion::ArrayDiffusion(const InputParameters & parameters) - : ArrayKernel(parameters), _dc_type(getParam("diffusion_coefficient_type")) + : ArrayKernel(parameters), + _d(hasMaterialProperty("diffusion_coefficient") ? + &getMaterialProperty("diffusion_coefficient") : nullptr), + _d_array(hasMaterialProperty("diffusion_coefficient") ? + &getMaterialProperty("diffusion_coefficient") : nullptr), + _d_2d_array(hasMaterialProperty("diffusion_coefficient") ? + &getMaterialProperty("diffusion_coefficient") : nullptr) { - if (_dc_type == 0) - _d = &getMaterialProperty("diffusion_coefficient"); - else if (_dc_type == 1) - _d_array = &getMaterialProperty("diffusion_coefficient"); - else if (_dc_type == 2) - _d_2d_array = &getMaterialProperty("diffusion_coefficient"); + if (!_d && !_d_array && !_d_2d_array) + { + MaterialPropertyName mat = getParam("diffusion_coefficient"); + mooseError("Property " + mat + " is of unsupported type for ArrayDiffusion"); + } } RealEigenVector ArrayDiffusion::computeQpResidual() { - if (_dc_type == 0) + if (_d) return _grad_u[_qp] * _array_grad_test[_i][_qp] * (*_d)[_qp]; - else if (_dc_type == 1) + else if (_d_array) { mooseAssert((*_d_array)[_qp].size() == _var.count(), "diffusion_coefficient size is inconsistent with the number of components of array " "variable"); - mooseAssert((*_d_array)[_qp].size() == _var.count(), ""); - RealEigenVector v = _grad_u[_qp] * _array_grad_test[_i][_qp]; - for (unsigned int i = 0; i < _var.count(); ++i) - v(i) *= (*_d_array)[_qp](i); - return v; + return (*_d_array)[_qp].cwiseProduct(_grad_u[_qp] * _array_grad_test[_i][_qp]); } else @@ -69,10 +69,10 @@ ArrayDiffusion::computeQpResidual() RealEigenVector ArrayDiffusion::computeQpJacobian() { - if (_dc_type == 0) + if (_d) return RealEigenVector::Constant(_var.count(), _grad_phi[_j][_qp] * _grad_test[_i][_qp] * (*_d)[_qp]); - else if (_dc_type == 1) + else if (_d_array) return _grad_phi[_j][_qp] * _grad_test[_i][_qp] * (*_d_array)[_qp]; else return _grad_phi[_j][_qp] * _grad_test[_i][_qp] * (*_d_2d_array)[_qp].diagonal(); @@ -81,7 +81,7 @@ ArrayDiffusion::computeQpJacobian() RealEigenMatrix ArrayDiffusion::computeQpOffDiagJacobian(MooseVariableFEBase & jvar) { - if (jvar.number() == _var.number() && _dc_type == 2) + if (jvar.number() == _var.number() && _d_2d_array) return _grad_phi[_j][_qp] * _grad_test[_i][_qp] * (*_d_2d_array)[_qp]; else return ArrayKernel::computeQpOffDiagJacobian(jvar); diff --git a/framework/src/kernels/ArrayReaction.C b/framework/src/kernels/ArrayReaction.C index a7a882296d7d..a1faca24fa49 100644 --- a/framework/src/kernels/ArrayReaction.C +++ b/framework/src/kernels/ArrayReaction.C @@ -16,32 +16,36 @@ InputParameters validParams() { InputParameters params = validParams(); - params.addParam("reaction_coefficient", "The name of the reactivity"); - MooseEnum opt("scalar=0 array=1 full=2", "array"); - params.addParam("reaction_coefficient_type", opt, "Reaction coefficient type"); + params.addParam("reaction_coefficient", "The name of the reactivity, " + "can be scalar, vector, or matrix."); params.addClassDescription("The array reaction operator with the weak " "form of $(\\psi_i, u_h)$."); return params; } ArrayReaction::ArrayReaction(const InputParameters & parameters) - : ArrayKernel(parameters), _r_type(getParam("reaction_coefficient_type")) + : ArrayKernel(parameters), + _r(hasMaterialProperty("reaction_coefficient") ? + &getMaterialProperty("reaction_coefficient") : nullptr), + _r_array(hasMaterialProperty("reaction_coefficient") ? + &getMaterialProperty("reaction_coefficient") : nullptr), + _r_2d_array(hasMaterialProperty("reaction_coefficient") ? + &getMaterialProperty("reaction_coefficient") : nullptr) { - if (_r_type == 0) - _r = &getMaterialProperty("reaction_coefficient"); - else if (_r_type == 1) - _r_array = &getMaterialProperty("reaction_coefficient"); - else if (_r_type == 2) - _r_2d_array = &getMaterialProperty("reaction_coefficient"); + if (!_r && !_r_array && !_r_2d_array) + { + MaterialPropertyName mat = getParam("reaction_coefficient"); + mooseError("Property " + mat + " is of unsupported type for ArrayReaction"); + } } RealEigenVector ArrayReaction::computeQpResidual() { - if (_r_type == 0) + if (_r) return (*_r)[_qp] * _u[_qp] * _test[_i][_qp]; - else if (_r_type == 1) + else if (_r_array) { mooseAssert((*_r_array)[_qp].size() == _var.count(), "reaction_coefficient size is inconsistent with the number of components of array " @@ -64,9 +68,9 @@ ArrayReaction::computeQpResidual() RealEigenVector ArrayReaction::computeQpJacobian() { - if (_r_type == 0) + if (_r) return RealEigenVector::Constant(_var.count(), _phi[_j][_qp] * _test[_i][_qp] * (*_r)[_qp]); - else if (_r_type == 1) + else if (_r_array) return _phi[_j][_qp] * _test[_i][_qp] * (*_r_array)[_qp]; else @@ -76,7 +80,7 @@ ArrayReaction::computeQpJacobian() RealEigenMatrix ArrayReaction::computeQpOffDiagJacobian(MooseVariableFEBase & jvar) { - if (jvar.number() == _var.number() && _r_type == 2) + if (jvar.number() == _var.number() && _r_2d_array) return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp]; else return ArrayKernel::computeQpOffDiagJacobian(jvar); diff --git a/test/tests/bcs/array_vacuum/array_vacuum.i b/test/tests/bcs/array_vacuum/array_vacuum.i index e5e2a1db8954..4136ce101e8d 100644 --- a/test/tests/bcs/array_vacuum/array_vacuum.i +++ b/test/tests/bcs/array_vacuum/array_vacuum.i @@ -22,7 +22,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [] diff --git a/test/tests/kernels/array_kernels/array_diffusion_reaction.i b/test/tests/kernels/array_kernels/array_diffusion_reaction.i index 71a3166572a8..b9c218d02975 100644 --- a/test/tests/kernels/array_kernels/array_diffusion_reaction.i +++ b/test/tests/kernels/array_kernels/array_diffusion_reaction.i @@ -22,7 +22,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [] diff --git a/test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i b/test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i index 4ab72405c953..9ca7a1235300 100644 --- a/test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i +++ b/test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i @@ -24,7 +24,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [diffv] diff --git a/test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i b/test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i index 0d82d0686c59..6a86bcf71bb9 100644 --- a/test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i +++ b/test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i @@ -31,7 +31,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [] diff --git a/test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i b/test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i index 888827b53d88..b817d41ecdfd 100644 --- a/test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i +++ b/test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i @@ -24,7 +24,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [diffv] diff --git a/test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i b/test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i index b2faa813cede..1f4b4eae3882 100644 --- a/test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i +++ b/test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i @@ -27,7 +27,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] [] diff --git a/test/tests/kernels/array_kernels/array_save_in.i b/test/tests/kernels/array_kernels/array_save_in.i index e22c35381da6..ec86bae4687c 100644 --- a/test/tests/kernels/array_kernels/array_save_in.i +++ b/test/tests/kernels/array_kernels/array_save_in.i @@ -67,7 +67,6 @@ [reaction] type = ArrayReaction variable = u - reaction_coefficient_type = full reaction_coefficient = rc [] []