Rheolef  7.2
an efficient C++ finite element environment
 
Loading...
Searching...
No Matches
navier_stokes_dg1.icc
Go to the documentation of this file.
1
26 Float Re1, const geo& omega, string approx)
27 : Re(Re1), Xh(), Qh(), iopt(), a0(), b(), c(), mu(), mp(), lh0(), lh(), kh(),
28 pmu(), pmp(), a1(), stokes1()
29{
30 Xh = space (omega, approx, "vector");
31 Qh = space (omega, approx);
32 iopt.set_family(integrate_option::gauss);
33 iopt.set_order(2*Xh.degree()+1);
35 trial u (Xh); test v (Xh);
36 lh = lh0 + Re*inertia_fix_rhs (v, iopt);
37 mu = integrate (dot(u,v), iopt);
38 pmu = problem (mu);
39 pmp = problem (mp);
40}
42navier_stokes_dg::initial (string restart) const {
43 value_type xh = { field(Xh, 0), field(Qh, 0) };
44 Float Re0 = 0;
45 if (restart == "") {
46 problem_mixed stokes0 (a0, b, c);
47 stokes0.set_metric (mp);
48 stokes0.solve (lh0, kh, xh[0], xh[1]);
49 } else {
50 idiststream in (restart);
51 in >> catchmark("Re") >> Re0
52 >> catchmark("u") >> xh[0]
53 >> catchmark("p") >> xh[1];
54 check_macro (xh[1].get_space() == Qh, "unexpected "
55 << xh[0].get_space().name() << " approximation in file \""
56 << restart << "\" (" << Xh.name() << " expected)");
57 }
58 derr << "# continuation: from Re=" << Re0 << " to " << Re << endl;
59 return xh;
60}
63 trial u (Xh); test v (Xh);
64 form a = a0 + Re*inertia(xh[0], u, v, iopt);
65 value_type mrh = { a*xh[0] + b.trans_mult(xh[1]) - lh,
66 b*xh[0] - c*xh[1] - kh};
67 return mrh;
68}
70 trial u (Xh); test v (Xh);
71 a1 = a0 + Re*(inertia(xh[0], u, v, iopt) + inertia(u, xh[0], v, iopt));
73 stokes1.set_metric (mp);
74}
77 value_type delta_xh = { field(Xh, 0), field(Qh, 0) };
78 stokes1.solve (mrh[0], mrh[1], delta_xh[0], delta_xh[1]);
79 return delta_xh;
80}
83 value_type rh = { field (Xh), field (Qh) };
84 pmu.solve (mrh[0], rh[0]);
85 pmp.solve (mrh[1], rh[1]);
86 value_type mgh = { a1.trans_mult(rh[0]) + b.trans_mult(rh[1]),
87 b*rh[0] - c*rh[1] };
88 return mgh;
89}
field lh(Float epsilon, Float t, const test &v)
see the Float page for the full documentation
see the field page for the full documentation
see the form page for the full documentation
see the geo page for the full documentation
see the problem_mixed page for the full documentation
see the problem page for the full documentation
see the space page for the full documentation
see the test page for the full documentation
see the test page for the full documentation
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
form inertia(W w, U u, V v, integrate_option iopt=integrate_option())
Definition inertia.h:26
field inertia_fix_rhs(test v, integrate_option iopt=integrate_option())
Definition inertia.h:37
void stokes_dirichlet_dg(const space &Xh, const space &Qh, form &a, form &b, form &c, form &mp, field &lh, field &kh, integrate_option iopt=integrate_option())
void update_derivative(const value_type &uh) const
integrate_option iopt
problem_mixed stokes1
value_type derivative_solve(const value_type &mrh) const
value_type initial(string restart) const
navier_stokes_dg(Float Re, const geo &omega, string approx)
value_type residue(const value_type &uh) const
value_type derivative_trans_mult(const value_type &mrh) const
Eigen::Matrix< field, 2, 1 > value_type
Definition leveque.h:25