Rheolef  7.2
an efficient C++ finite element environment
 
Loading...
Searching...
No Matches
transport_tensor_exact.icc

The tensorial transport benchmark – right-hand-side and exact solution.

The tensorial transport benchmark – right-hand-side and exact solution

point u(const point& x) { return point (-x[1], x[0]); }
tensor grad_u = {{0,-1},{1,0}};
struct sigma_exact {
Float f (const point& x) const {
return 0.5*exp( - nu*t - norm2(x-xt)/sqr(r0));
}
Float df_dt (const point& x) const {
return ( - nu + 2*dot(vt,x-xt)/sqr(r0))*f(x);
}
tensor operator() (const point& x) const {
Float c0 = f(x);
tensor s;
s(0,0) = c0*(1+cos(2*t));
s(1,1) = c0*(1-cos(2*t));
s(0,1) =
s(1,0) = c0*sin(2*t);
return s;
}
tensor time_derivative (const point& x) const {
Float c0 = f(x);
Float c1 = df_dt(x);
tensor s;
s(0,0) = c1*(1+cos(2*t)) - 2*c0*sin(2*t);
s(1,1) = c1*(1-cos(2*t)) + 2*c0*sin(2*t);
s(0,1) =
s(1,0) = c1*sin(2*t) + 2*c0*cos(2*t);
return s;
}
sigma_exact (Float nu1, Float t1 = 0)
: nu(nu1), t(t1), r0(0.1), x0(0.25,0), xt(), vt()
{
xt = point( x0[0]*cos(t) - x0[1]*sin(t),
x0[0]*sin(t) + x0[1]*cos(t));
vt = point(-x0[0]*sin(t) - x0[1]*cos(t),
x0[0]*cos(t) - x0[1]*sin(t));
}
Float nu, t, r0;
};
struct chi {
tensor operator() (const point& x) const {
return - _s.time_derivative(x);
}
chi (Float nu, Float t = 0): _s(nu, t) {}
};
see the Float page for the full documentation
see the point page for the full documentation
see the tensor page for the full documentation
sigma_exact sigma_g
rheolef::details::is_vec dot
tensor_basic< T > exp(const tensor_basic< T > &a, size_t d)
Definition tensor-exp.cc:92
T norm2(const vec< T, M > &x)
norm2(x): see the expression page for the full documentation
Definition vec.h:379
tensor operator()(const point &x) const
Definition cavity_dg.h:29
Definition nu.h:26
tensor operator()(const point &x) const
Float df_dt(const point &x) const
tensor time_derivative(const point &x) const
Definition leveque.h:25