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 "ADMortarConstraint.h" 11 : 12 : // MOOSE includes 13 : #include "MooseVariable.h" 14 : #include "Assembly.h" 15 : #include "SystemBase.h" 16 : #include "ADUtils.h" 17 : 18 : InputParameters 19 144338 : ADMortarConstraint::validParams() 20 : { 21 144338 : InputParameters params = MortarConstraintBase::validParams(); 22 144338 : return params; 23 : } 24 : 25 849 : ADMortarConstraint::ADMortarConstraint(const InputParameters & parameters) 26 : : MortarConstraintBase(parameters), 27 849 : _lambda_dummy(), 28 849 : _lambda(_var ? _var->adSlnLower() : _lambda_dummy), 29 849 : _u_secondary(_secondary_var.adSln()), 30 849 : _u_primary(_primary_var.adSlnNeighbor()), 31 849 : _grad_u_secondary(_secondary_var.adGradSln()), 32 1698 : _grad_u_primary(_primary_var.adGradSlnNeighbor()) 33 : { 34 849 : _subproblem.haveADObjects(true); 35 849 : } 36 : 37 : void 38 352246 : ADMortarConstraint::computeResidual(Moose::MortarType mortar_type) 39 : { 40 352246 : unsigned int test_space_size = 0; 41 352246 : switch (mortar_type) 42 : { 43 133042 : case Moose::MortarType::Secondary: 44 133042 : prepareVectorTag(_assembly, _secondary_var.number()); 45 133042 : test_space_size = _test_secondary.size(); 46 133042 : break; 47 : 48 133042 : case Moose::MortarType::Primary: 49 133042 : prepareVectorTagNeighbor(_assembly, _primary_var.number()); 50 133042 : test_space_size = _test_primary.size(); 51 133042 : break; 52 : 53 86162 : case Moose::MortarType::Lower: 54 : mooseAssert(_var, "LM variable is null"); 55 86162 : prepareVectorTagLower(_assembly, _var->number()); 56 86162 : test_space_size = _test.size(); 57 86162 : break; 58 : } 59 : 60 1906610 : for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++) 61 21676548 : for (_i = 0; _i < test_space_size; _i++) 62 20122184 : _local_re(_i) += raw_value(_JxW_msm[_qp] * _coord[_qp] * computeQpResidual(mortar_type)); 63 : 64 352246 : accumulateTaggedLocalResidual(); 65 352246 : } 66 : 67 : void 68 130576 : ADMortarConstraint::computeJacobian(Moose::MortarType mortar_type) 69 : { 70 130576 : std::vector<ADReal> residuals; 71 130576 : std::size_t test_space_size = 0; 72 : typedef Moose::ConstraintJacobianType JType; 73 : typedef Moose::MortarType MType; 74 130576 : std::vector<JType> jacobian_types; 75 130576 : std::vector<dof_id_type> dof_indices; 76 130576 : Real scaling_factor = 1; 77 : 78 130576 : switch (mortar_type) 79 : { 80 47016 : case MType::Secondary: 81 47016 : dof_indices = _secondary_var.dofIndices(); 82 47016 : jacobian_types = {JType::SecondarySecondary, JType::SecondaryPrimary, JType::SecondaryLower}; 83 47016 : scaling_factor = _secondary_var.scalingFactor(); 84 47016 : break; 85 : 86 47016 : case MType::Primary: 87 47016 : dof_indices = _primary_var.dofIndicesNeighbor(); 88 47016 : jacobian_types = {JType::PrimarySecondary, JType::PrimaryPrimary, JType::PrimaryLower}; 89 47016 : scaling_factor = _primary_var.scalingFactor(); 90 47016 : break; 91 : 92 36544 : case MType::Lower: 93 : mooseAssert(_var, "The Lagrange Multiplier should be non-null if this is getting called"); 94 36544 : dof_indices = _var->dofIndicesLower(); 95 36544 : jacobian_types = {JType::LowerSecondary, JType::LowerPrimary, JType::LowerLower}; 96 36544 : scaling_factor = _var->scalingFactor(); 97 36544 : break; 98 : } 99 130576 : test_space_size = dof_indices.size(); 100 : 101 130576 : residuals.resize(test_space_size, 0); 102 838984 : for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++) 103 10843140 : for (_i = 0; _i < test_space_size; _i++) 104 10134732 : residuals[_i] += _JxW_msm[_qp] * _coord[_qp] * computeQpResidual(mortar_type); 105 : 106 130576 : addResidualsAndJacobianWithoutConstraints(_assembly, residuals, dof_indices, scaling_factor); 107 130576 : } 108 : 109 : void 110 3260 : ADMortarConstraint::computeResidualAndJacobian() 111 : { 112 3260 : computeJacobian(); 113 3260 : }