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

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

The tensor transport-diffusion 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;
}
tensor3 grad (const point& x) const {
point vec = x - xt;
for (size_t i = 0; i < 2; i++)
for (size_t j = 0; j < 2; j++)
for (size_t k = 0; k < 2; k++)
A(i,j,k) = s(i,j)*vec[k];
A *= (-2/sqr(r0));
return A;
}
tensor laplacian (const point& x) const {
return (norm2(x-xt)/sqr(r0) - 1)*(4/sqr(r0))*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 - _eps * _s.laplacian(x) - _s.time_derivative(x);
}
chi (Float eps, Float nu, Float t = 0): _eps(eps), _s(nu, t) {}
};
struct grad_sigma_g {
tensor3 operator() (const point& x) const {
return _s.grad(x);
}
grad_sigma_g (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 tensor3 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
tensor3 operator()(const point &x) const
Definition nu.h:26
tensor laplacian(const point &x) const
tensor operator()(const point &x) const
tensor3 grad(const point &x) const
Float df_dt(const point &x) const
tensor time_derivative(const point &x) const
Definition leveque.h:25