Loading...
Searching...
No Matches
navier_stokes_dg1.icc

The Navier-Stokes equations with the discontinuous Galerkin method – class body.

The Navier-Stokes equations with the discontinuous Galerkin method – class body

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
geo
see the geo 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
u
point u(const point &x)
Definition diffusion_transport_tensor_exact.icc:25
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.a
int a
Definition mkgeo_ball.sh:151
mkgeo_contraction.name
str name
Definition mkgeo_contraction.sh:133
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
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