30 const space& Xh = uh.get_space();
31 const space& Wh = lambda_h.get_space();
34 form m = integrate (
u*v),
35 a0 = integrate (dot(grad(
u),grad(v))),
36 a = a0 + integrate (boundary, r*
u*v),
37 mb = integrate (
lambda*mu),
38 b = integrate (boundary,
u*mu);
40 derr <<
"# k residue" << endl;
42 for (
size_t k = 0;
true; ++k) {
43 field gamma_h = lazy_interpolate(Wh,
44 compose(
projection(S,n,Cf,r), lambda_h + r*uh[
"boundary"]));
45 field delta_lambda_h = r*(uh[
"boundary"] - gamma_h);
46 lambda_h += delta_lambda_h;
48 derr << k <<
" " <<
residue << endl;
49 if (residue <= tol || k >= max_iter)
return (
residue <= tol) ? 0 : 1;
50 field rhs =
lh + b.trans_mult(r*gamma_h - lambda_h);
field residue(Float p, const field &uh)
int yield_slip_augmented_lagrangian(Float S, Float n, Float Cf, geo boundary, field lh, field &lambda_h, field &uh, Float tol, size_t max_iter, Float r)