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