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 "ADMortarScalarBase.h" 11 : 12 : // MOOSE includes 13 : #include "Assembly.h" 14 : #include "SystemBase.h" 15 : #include "MooseVariable.h" 16 : #include "MooseVariableScalar.h" 17 : #include "ADUtils.h" 18 : 19 : InputParameters 20 43033 : ADMortarScalarBase::validParams() 21 : { 22 43033 : InputParameters params = ADMortarConstraint::validParams(); 23 : // This parameter can get renamed in derived class to a more relevant variable name 24 43033 : params.addCoupledVar("scalar_variable", "Primary coupled scalar variable"); 25 43033 : params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals"); 26 43033 : return params; 27 0 : } 28 : 29 120 : ADMortarScalarBase::ADMortarScalarBase(const InputParameters & parameters) 30 : : ADMortarConstraint(parameters), 31 120 : _use_scalar(isParamValid("scalar_variable") ? true : false), 32 120 : _compute_scalar_residuals(!_use_scalar ? false : getParam<bool>("compute_scalar_residuals")), 33 120 : _kappa_var_ptr(_use_scalar ? getScalarVar("scalar_variable", 0) : nullptr), 34 120 : _kappa_var(_use_scalar ? _kappa_var_ptr->number() : 0), 35 120 : _k_order(_use_scalar ? _kappa_var_ptr->order() : 0), 36 240 : _kappa(_use_scalar ? _kappa_var_ptr->adSln() : _ad_zero) 37 : { 38 120 : } 39 : 40 : void 41 3928 : ADMortarScalarBase::computeResidual() 42 : { 43 3928 : ADMortarConstraint::computeResidual(); 44 : 45 3928 : if (!_compute_scalar_residuals) 46 0 : return; 47 : 48 3928 : std::vector<Real> scalar_residuals(_k_order); 49 23472 : for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++) 50 : { 51 19544 : initScalarQpResidual(); 52 75224 : for (_h = 0; _h < _k_order; _h++) 53 55680 : scalar_residuals[_h] += _JxW_msm[_qp] * _coord[_qp] * raw_value(computeScalarQpResidual()); 54 : } 55 3928 : addResiduals( 56 3928 : _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor()); 57 3928 : } 58 : 59 : void 60 1912 : ADMortarScalarBase::computeJacobian() 61 : { 62 : // d-_var-residual / d-_var and d-_var-residual / d-jvar 63 1912 : ADMortarConstraint::computeJacobian(); 64 : 65 1912 : if (!_compute_scalar_residuals) 66 0 : return; 67 : 68 1912 : std::vector<ADReal> scalar_residuals; 69 1912 : scalar_residuals.resize(_k_order, 0); 70 12664 : for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++) 71 : { 72 10752 : initScalarQpResidual(); 73 42064 : for (_h = 0; _h < _k_order; _h++) 74 31312 : scalar_residuals[_h] += _JxW_msm[_qp] * _coord[_qp] * computeScalarQpResidual(); 75 : } 76 1912 : addResidualsAndJacobianWithoutConstraints( 77 1912 : _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor()); 78 1912 : }