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