Rheolef  7.1
an efficient C++ finite element environment
reconstruction_hho.cc
Go to the documentation of this file.
1 #include "rheolef.h"
26 using namespace rheolef;
27 using namespace std;
28 #include "sinusprod.h"
29 #include "diffusion_isotropic.h"
30 int main(int argc, char**argv) {
31  environment rheolef (argc, argv);
32  geo omega (argv[1]);
33  string Pkd = (argc > 2) ? argv[2] : "P0",
34  Pld = (argc > 3) ? argv[3] : Pkd;
35  space Xh (omega, Pld),
36  Mh (omega["sides"], Pkd);
37  size_t k = Xh.degree(), l = Mh.degree(), d = omega.dimension();
38  check_macro(l == k-1 || l == k || l == k+1,
39  "invalid (k,l) = ("<<k<<","<<l<<")");
40  space Xhs(omega, "P"+itos(k+1)+"d"),
41  Zh (omega, "P0"),
42  Yh = Xhs*Zh;
43  trial u(Xh), lambda(Mh), x(Yh);
44  test v(Xh), mu (Mh), y(Yh);
45  auto us = x[0], zeta = x[1];
46  auto vs = y[0], xi = y[1];
47  integrate_option iopt;
48  iopt.invert = true;
49  form inv_m = integrate (u*v, iopt);
50  form ms = integrate (lambda*mu);
51  field lh = integrate(u_exact(d)*v);
52  field kh = integrate(u_exact(d)*mu);
53  field uh = inv_m*lh;
54  field lambda_h(Mh);
55  problem pms (ms);
56  pms.solve (kh, lambda_h);
57  form inv_as = integrate (dot(grad_h(us),a(d)*grad_h(vs)) + us*xi
58  + vs*zeta, iopt);
59  field lhs = integrate (dot(grad_h(uh),a(d)*grad_h(vs)) + uh*xi
60  + on_local_sides((lambda_h-uh)
61  *dot(normal(),a(d)*grad_h(vs))));
62  field xh = inv_as*lhs;
63  dout << catchmark("us") << xh[0];
64 }
sinusprod.h
The sinus product function.
form
see the form page for the full documentation
rheolef::catchmark
see the catchmark page for the full documentation
Definition: catchmark.h:67
rheolef::dot
rheolef::std enable_if ::type dot const Expr1 expr1, const Expr2 expr2 dot(const Expr1 &expr1, const Expr2 &expr2)
dot(x,y): see the expression page for the full documentation
Definition: vec_expr_v2.h:415
field
see the field page for the full documentation
rheolef::normal
details::field_expr_v2_nonlinear_terminal_function< details::normal_pseudo_function< Float > > normal()
normal: see the expression page for the full documentation
Definition: field_expr_terminal.h:439
rheolef::integrate
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
mkgeo_ball.d
int d
Definition: mkgeo_ball.sh:154
space
see the space page for the full documentation
main
int main(int argc, char **argv)
Definition: reconstruction_hho.cc:30
rheolef.h
rheolef - reference manual
rheolef::integrate_option
see the integrate_option page for the full documentation
Definition: integrate_option.h:125
rheolef::on_local_sides
std::enable_if< details::is_field_expr_v2_variational_arg< Expr >::value,details::field_expr_quadrature_on_sides< Expr > >::type on_local_sides(const Expr &expr)
on_local_sides(expr): see the expression page for the full documentation
Definition: field_expr_quadrature.h:321
rheolef::environment
see the environment page for the full documentation
Definition: environment.h:115
lh
field lh(Float epsilon, Float t, const test &v)
Definition: burgers_diffusion_operators.icc:25
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::integrate_option::invert
bool invert
Definition: integrate_option.h:168
test
see the test page for the full documentation
problem
see the problem page for the full documentation
u
Definition: leveque.h:25
u_exact
g u_exact
Definition: taylor_exact.h:26
u
Float u(const point &x)
Definition: transmission_error.cc:26
diffusion_isotropic.h
Tensor diffusion – isotropic case.
mkgeo_contraction.mu
mu
Definition: mkgeo_contraction.sh:193
rheolef::grad_h
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_h(const Expr &expr)
grad_h(uh): see the expression page for the full documentation
Definition: field_expr_terminal.h:949
trial
see the test page for the full documentation
mkgeo_ball.a
int a
Definition: mkgeo_ball.sh:151
rheolef::dout
odiststream dout(cout)
see the diststream page for the full documentation
Definition: diststream.h:430
rheolef::itos
std::string itos(std::string::size_type i)
itos: see the rheostream page for the full documentation
rheolef::std
Definition: vec_expr_v2.h:402
geo
see the geo page for the full documentation
lambda
Definition: yield_slip_circle.h:34