navier_stokes_dg1.icc
Go to the documentation of this file.
navier_stokes_dg::navier_stokes_dg (
Float Re1, const geo& omega, string approx)
: Re(Re1), Xh(), Qh(), iopt(), a0(), b(), c(), mu(), mp(), lh0(), lh(), kh(),
pmu(), pmp(), a1(), stokes1()
{
Xh = space (omega, approx, "vector");
Qh = space (omega, approx);
iopt.set_family(integrate_option::gauss);
iopt.set_order(2*Xh.degree()+1);
stokes_dirichlet_dg (Xh, Qh, a0, b, c, mp, lh0, kh, iopt);
trial u (Xh); test v (Xh);
lh = lh0 + Re*inertia_fix_rhs (v, iopt);
mu = integrate (dot(u,v), iopt);
pmu = problem (mu);
pmp = problem (mp);
}
navier_stokes_dg::value_type
navier_stokes_dg::initial (string restart) const {
value_type xh = { field(Xh, 0), field(Qh, 0) };
Float Re0 = 0;
if (restart == "") {
problem_mixed stokes0 (a0, b, c);
stokes0.set_metric (mp);
stokes0.solve (lh0, kh, xh[0], xh[1]);
} else {
idiststream in (restart);
in >> catchmark("Re") >> Re0
>> catchmark("u") >> xh[0]
>> catchmark("p") >> xh[1];
check_macro (xh[1].get_space() == Qh, "unexpected "
<< xh[0].get_space().name() << " approximation in file \""
<< restart << "\" (" << Xh.name() << " expected)");
}
derr << "# continuation: from Re=" << Re0 << " to " << Re << endl;
return xh;
}
navier_stokes_dg::value_type
navier_stokes_dg::residue (const value_type& xh) const {
trial u (Xh); test v (Xh);
form a = a0 + Re*inertia(xh[0], u, v, iopt);
value_type mrh = { a*xh[0] + b.trans_mult(xh[1]) - lh,
b*xh[0] - c*xh[1] - kh};
return mrh;
}
void navier_stokes_dg::update_derivative (const value_type& xh) const {
trial u (Xh); test v (Xh);
a1 = a0 + Re*(inertia(xh[0], u, v, iopt) + inertia(u, xh[0], v, iopt));
stokes1 = problem_mixed (a1, b, c);
stokes1.set_metric (mp);
}
navier_stokes_dg::value_type
navier_stokes_dg::derivative_solve (const value_type& mrh) const {
value_type delta_xh = { field(Xh, 0), field(Qh, 0) };
stokes1.solve (mrh[0], mrh[1], delta_xh[0], delta_xh[1]);
return delta_xh;
}
navier_stokes_dg::value_type
navier_stokes_dg::derivative_trans_mult (const value_type& mrh) const {
value_type rh = { field (Xh), field (Qh) };
pmu.solve (mrh[0], rh[0]);
pmp.solve (mrh[1], rh[1]);
value_type mgh = { a1.trans_mult(rh[0]) + b.trans_mult(rh[1]),
b*rh[0] - c*rh[1] };
return mgh;
}
lh
field lh(Float epsilon, Float t, const test &v)
Definition: burgers_diffusion_operators.icc:25
Float
see the Float page for the full documentation
field
see the field page for the full documentation
form
see the form page for the full documentation
geo
see the geo page for the full documentation
problem_mixed
see the problem_mixed page for the full documentation
problem
see the problem page for the full documentation
space
see the space page for the full documentation
test
see the test page for the full documentation
trial
see the test page for the full documentation
check_macro
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
inertia
form inertia(W w, U u, V v, integrate_option iopt=integrate_option())
Definition: inertia.h:26
inertia_fix_rhs
field inertia_fix_rhs(test v, integrate_option iopt=integrate_option())
Definition: inertia.h:37
mkgeo_ball.b
int b
Definition: mkgeo_ball.sh:152
mkgeo_ball.c
int c
Definition: mkgeo_ball.sh:153
mkgeo_contraction.mu
mu
Definition: mkgeo_contraction.sh:193
mkgeo_contraction.name
string name
Definition: mkgeo_contraction.sh:133
rheolef::details::dot
rheolef::details::is_vec dot
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
stokes_dirichlet_dg
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())
Definition: stokes_dirichlet_dg.icc:25
a
Definition: diffusion_isotropic.h:25
navier_stokes_dg::a1
form a1
Definition: navier_stokes_dg.h:42
navier_stokes_dg::mp
form mp
Definition: navier_stokes_dg.h:39
navier_stokes_dg::Xh
space Xh
Definition: navier_stokes_dg.h:37
navier_stokes_dg::lh0
field lh0
Definition: navier_stokes_dg.h:40
navier_stokes_dg::pmp
problem pmp
Definition: navier_stokes_dg.h:41
navier_stokes_dg::update_derivative
void update_derivative(const value_type &uh) const
Definition: navier_stokes_dg1.icc:69
navier_stokes_dg::lh
field lh
Definition: navier_stokes_dg.h:40
navier_stokes_dg::iopt
integrate_option iopt
Definition: navier_stokes_dg.h:38
navier_stokes_dg::stokes1
problem_mixed stokes1
Definition: navier_stokes_dg.h:43
navier_stokes_dg::derivative_solve
value_type derivative_solve(const value_type &mrh) const
Definition: navier_stokes_dg1.icc:76
navier_stokes_dg::initial
value_type initial(string restart) const
Definition: navier_stokes_dg1.icc:42
navier_stokes_dg::navier_stokes_dg
navier_stokes_dg(Float Re, const geo &omega, string approx)
Definition: navier_stokes_dg1.icc:25
navier_stokes_dg::Re
Float Re
Definition: navier_stokes_dg.h:36
navier_stokes_dg::pmu
problem pmu
Definition: navier_stokes_dg.h:41
navier_stokes_dg::b
form b
Definition: navier_stokes_dg.h:39
navier_stokes_dg::residue
value_type residue(const value_type &uh) const
Definition: navier_stokes_dg1.icc:62
navier_stokes_dg::derivative_trans_mult
value_type derivative_trans_mult(const value_type &mrh) const
Definition: navier_stokes_dg1.icc:82
navier_stokes_dg::c
form c
Definition: navier_stokes_dg.h:39
navier_stokes_dg::value_type
Eigen::Matrix< field, 2, 1 > value_type
Definition: navier_stokes_dg.h:27
navier_stokes_dg::Qh
space Qh
Definition: navier_stokes_dg.h:37
navier_stokes_dg::kh
field kh
Definition: navier_stokes_dg.h:40
navier_stokes_dg::a0
form a0
Definition: navier_stokes_dg.h:39
u
Definition: leveque.h:25
u
Float u(const point &x)
Definition: transmission_error.cc:26