Rheolef  7.2
an efficient C++ finite element environment
diffusion_transport_tensor_exact.icc
Go to the documentation of this file.
1
25point u(const point& x) { return point (-x[1], x[0]); }
26tensor grad_u = {{0,-1},{1,0}};
27
28struct sigma_exact {
29 Float f (const point& x) const {
30 return 0.5*exp( - nu*t - norm2(x-xt)/sqr(r0));
31 }
32 Float df_dt (const point& x) const {
33 return ( - nu + 2*dot(vt,x-xt)/sqr(r0))*f(x);
34 }
35 tensor operator() (const point& x) const {
36 Float c0 = f(x);
37 tensor s;
38 s(0,0) = c0*(1+cos(2*t));
39 s(1,1) = c0*(1-cos(2*t));
40 s(0,1) =
41 s(1,0) = c0*sin(2*t);
42 return s;
43 }
44 tensor time_derivative (const point& x) const {
45 Float c0 = f(x);
46 Float c1 = df_dt(x);
47 tensor s;
48 s(0,0) = c1*(1+cos(2*t)) - 2*c0*sin(2*t);
49 s(1,1) = c1*(1-cos(2*t)) + 2*c0*sin(2*t);
50 s(0,1) =
51 s(1,0) = c1*sin(2*t) + 2*c0*cos(2*t);
52 return s;
53 }
54 tensor3 grad (const point& x) const {
55 tensor s = operator()(x);
56 point vec = x - xt;
57 tensor3 A;
58 for (size_t i = 0; i < 2; i++)
59 for (size_t j = 0; j < 2; j++)
60 for (size_t k = 0; k < 2; k++)
61 A(i,j,k) = s(i,j)*vec[k];
62 A *= (-2/sqr(r0));
63 return A;
64 }
65 tensor laplacian (const point& x) const {
66 tensor s = operator()(x);
67 return (norm2(x-xt)/sqr(r0) - 1)*(4/sqr(r0))*s;
68 }
69 sigma_exact (Float nu1, Float t1 = 0)
70 : nu(nu1), t(t1), r0(0.1), x0(0.25,0), xt(), vt()
71 {
72 xt = point( x0[0]*cos(t) - x0[1]*sin(t),
73 x0[0]*sin(t) + x0[1]*cos(t));
74 vt = point(-x0[0]*sin(t) - x0[1]*cos(t),
75 x0[0]*cos(t) - x0[1]*sin(t));
76 }
79};
80struct chi {
81 tensor operator() (const point& x) const {
82 return - _eps * _s.laplacian(x) - _s.time_derivative(x);
83 }
84 chi (Float eps, Float nu, Float t = 0): _eps(eps), _s(nu, t) {}
87};
89 tensor3 operator() (const point& x) const {
90 return _s.grad(x);
91 }
92 grad_sigma_g (Float nu, Float t = 0): _s(nu, t) {}
94};
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
point u(const point &x)
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
chi(Float eps, Float nu, Float t=0)
grad_sigma_g(Float nu, Float t=0)
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 f(const point &x) const
Float df_dt(const point &x) const
tensor time_derivative(const point &x) const
sigma_exact(Float nu1, Float t1=0)