oldroyd_theta_scheme3.h
Go to the documentation of this file.
template <class P>
void oldroyd_theta_scheme<P>::sub_step1 (
const field& tau_h0, const field& uh0, const field& ph0,
field& tau_h, field& uh, field& ph) const
{
update_transport_stress (uh0);
field gamma_h = inv_mt*(th*tau_h0 - thb);
test v (Xh), xi (Th);
field lh = lambda*integrate (dot(uh0,v))
+ b*(c1*tau_h0 + c2*gamma_h);
ph = ph0;
uh.set_u() = uh0.u();
stokes.solve (lh, field(Qh,0), uh, ph);
field Duh = inv_mt*integrate(ddot(D(uh),xi));
tau_h = c1*tau_h0 + c2*gamma_h + 2*c3*Duh;
}
template <class P>
void oldroyd_theta_scheme<P>::sub_step2 (
const field& uh0,
const field& tau_h1, const field& uh1,
field& tau_h, field& uh) const
{
uh = (1-theta)/theta*uh1 - (1-2*theta)/theta*uh0;
test xi (Th);
if (We == 0) {
field Duh = inv_mt*integrate(ddot(D(uh),xi));
tau_h = 2*alpha*Duh;
return;
}
update_transport_stress (uh);
form th_nu = th + nu*mt;
typename P::tau_upstream tau_up (Th.get_geo(), We, alpha);
field lh = integrate (ddot(c4*tau_h1 + 2*c5*D(uh1),xi))
+ integrate ("boundary",
max(0, -dot(uh,normal()))*ddot(tau_up,xi));
problem transport (th_nu);
transport.solve (lh, tau_h);
}
template <class P>
void
oldroyd_theta_scheme<P>::update_transport_stress (const field& uh) const {
typename P::tau_upstream tau_up (Th.get_geo(), We, alpha);
trial tau (Th); test xi (Th);
auto ma = 0.5*((1-a)*grad(uh) - (1+a)*trans(grad(uh)));
auto beta_a = tau*ma + trans(ma)*tau;
th = integrate (ddot(grad_h(tau)*uh + beta_a,xi))
+ integrate ("boundary", max(0, -dot(uh,normal()))*ddot(tau,xi))
+ integrate ("internal_sides",
- dot(uh,normal())*ddot(jump(tau),average(xi))
+ 0.5*abs(dot(uh,normal()))*ddot(jump(tau),jump(xi)));
thb = integrate ("boundary", max(0, -dot(uh,normal()))*ddot(tau_up,xi));
}
lh
field lh(Float epsilon, Float t, const test &v)
Definition: burgers_diffusion_operators.icc:25
field
see the field page for the full documentation
form
see the form page for the full documentation
problem
see the problem page for the full documentation
test
see the test page for the full documentation
trial
see the test page for the full documentation
bdf::alpha
Float alpha[pmax+1][pmax+1]
Definition: bdf.icc:28
mkgeo_ball.b
int b
Definition: mkgeo_ball.sh:152
mkgeo_ball.a
int a
Definition: mkgeo_ball.sh:151
mkgeo_contraction.c2
c2
Definition: mkgeo_contraction.sh:199
rheolef::details::dot
rheolef::details::is_vec dot
rheolef::trans
csr< T, sequential > trans(const csr< T, sequential > &a)
trans(a): see the form page for the full documentation
Definition: csr.h:455
rheolef::grad
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
Definition: field_expr_terminal.h:911
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
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
rheolef::ddot
T ddot(const tensor_basic< T > &a, const tensor_basic< T > &b)
ddot(x,y): see the expression page for the full documentation
Definition: tensor.cc:278
rheolef::D
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 D(const Expr &expr)
D(uh): see the expression page for the full documentation.
Definition: field_expr_terminal.h:969
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
lambda
Definition: yield_slip_circle.h:34
nu
Definition: nu.h:26
oldroyd_theta_scheme::sub_step1
void sub_step1(const field &tau_h0, const field &uh0, const field &ph0, field &tau_h, field &uh, field &ph) const
Definition: oldroyd_theta_scheme3.h:26
oldroyd_theta_scheme::update_transport_stress
void update_transport_stress(const field &uh) const
Definition: oldroyd_theta_scheme3.h:65
oldroyd_theta_scheme::sub_step2
void sub_step2(const field &uh0, const field &tau_h1, const field &uh1, field &tau_h, field &uh) const
Definition: oldroyd_theta_scheme3.h:42