68 auto reason = T::checkConvergence(iter);
70 auto & fe_problem_base = this->getMooseApp().feProblem();
72 bool repeat_augmented_lagrange_step =
false;
75 if (reason == Convergence::MooseConvergenceStatus::CONVERGED)
77 if (_lagrangian_iteration_number < _maximum_number_lagrangian_iterations)
80 auto & nonlinear_sys = fe_problem_base.currentNonlinearSystem();
81 nonlinear_sys.update();
87 : fe_problem_base.geomSearchData())
88 ._penetration_locators;
92 std::list<std::shared_ptr<MechanicalContactConstraint>> mccs;
93 for (
const auto & pair : penetration_locators)
95 const auto & boundaries = pair.first;
102 mccs.emplace_back(
nullptr);
103 for (
const auto & nc : ncs)
104 if (
const auto mcc = std::dynamic_pointer_cast<MechanicalContactConstraint>(nc); !mcc)
105 mooseError(
"AugmentedLagrangianContactProblem: dynamic cast of "
106 "MechanicalContactConstraint object failed.");
113 if (mcc->secondaryBoundary() != boundaries.second ||
114 mcc->primaryBoundary() != boundaries.first)
122 if (repeat_augmented_lagrange_step || !mcc->AugmentedLagrangianContactConverged())
124 repeat_augmented_lagrange_step =
true;
131 const auto & pmuos = this->_app.template getInterfaceObjects<AugmentedLagrangeInterface>();
132 for (
auto * pmuo : pmuos)
135 if (!repeat_augmented_lagrange_step && !pmuo->isAugmentedLagrangianConverged())
136 repeat_augmented_lagrange_step =
true;
141 this->_communicator.max(repeat_augmented_lagrange_step);
144 if (repeat_augmented_lagrange_step)
146 _lagrangian_iteration_number++;
147 Moose::out <<
"Augmented Lagrangian contact repeat " << _lagrangian_iteration_number
153 for (
const auto & mcc : mccs)
154 mcc->updateAugmentedLagrangianMultiplier(
false);
157 for (
const auto & pmuo : pmuos)
158 pmuo->updateAugmentedLagrangianMultipliers();
161 for (
const auto & pmuo : pmuos)
162 pmuo->augmentedLagrangianSetup();
165 reason = Convergence::MooseConvergenceStatus::ITERATING;
166 Moose::out <<
"Augmented Lagrangian Multiplier needs updating.";
169 Moose::out <<
"Augmented Lagrangian contact constraint enforcement is satisfied.";
174 Moose::out <<
"Maximum Augmented Lagrangian contact iterations have been reached.";
175 reason = Convergence::MooseConvergenceStatus::DIVERGED;