Rheolef  7.1
an efficient C++ finite element environment
mosolov_augmented_lagrangian1.icc
Go to the documentation of this file.
1 #include "vector_projection.h"
26 int mosolov_augmented_lagrangian::solve (field& sigma_h, field& uh) const {
27  test v(Xh);
28  derr << "# k residue" << endl;
29  for (size_t k = 0; true; ++k) {
30  field grad_uh = inv_mt*(b*uh);
31  auto c = compose(vector_projection(Bi,n,1,r), norm(sigma_h+r*grad_uh));
32  field gamma_h = interpolate(Th, c*(sigma_h + r*grad_uh));
33  field delta_sigma_h = r*(grad_uh - gamma_h);
34  sigma_h += delta_sigma_h;
35  Float residue = delta_sigma_h.max_abs();
36  derr << k << " " << residue << endl;
37  if (residue <= tol || k >= max_iter) {
38  derr << endl << endl;
39  return (pow(residue,3) <= tol) ? 0 : 1;
40  }
41  field rhs = (1/r)*(lh - integrate(dot(sigma_h - r*gamma_h, grad(v))));
42  pa.solve (rhs, uh);
43  }
44 }
see the Float page for the full documentation
see the field page for the full documentation
see the test page for the full documentation
class rheolef::details::field_expr_v2_nonlinear_node_unary compose
rheolef::details::is_vec dot
T norm(const vec< T, M > &x)
norm(x): see the expression page for the full documentation
Definition: vec.h:387
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type grad(const Expr &expr)
grad(uh): see the expression page for the full documentation
std::enable_if< details::is_field_expr_v2_nonlinear_arg< Expr >::value &&! is_undeterminated< Result >::value, Result >::type integrate(const geo_basic< T, M > &omega, const Expr &expr, const integrate_option &iopt, Result dummy=Result())
see the integrate page for the full documentation
Definition: integrate.h:202
field_basic< T, M > interpolate(const space_basic< T, M > &V2h, const field_basic< T, M > &u1h)
see the interpolate page for the full documentation
Definition: interpolate.cc:233
space_mult_list< T, M > pow(const space_basic< T, M > &X, size_t n)
Definition: space_mult.h:120
field residue(Float p, const field &uh)
int solve(field &sigma_h, field &uh) const
The projection for yield-stress rheologies – vector-valued case for the Mossolov problem.