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