Tatooine
rayleigh_benard_convection.h
Go to the documentation of this file.
1#ifndef TATOOINE_ANALYTICAL_NUMERICAL_H
2#define TATOOINE_ANALYTICAL_NUMERICAL_H
3//==============================================================================
4#include <tatooine/field.h>
5//==============================================================================
7//==============================================================================
8template <typename Real>
10 : vectorfield<rayleigh_benard_convection<Real>, Real, 3> {
13 using real_type = Real;
14 using typename parent_type::pos_type;
15 using typename parent_type::tensor_type;
16 //============================================================================
17 private:
18 Real m_A, m_k;
19 //============================================================================
20 public:
22 //----------------------------------------------------------------------------
24 //----------------------------------------------------------------------------
27 auto operator=(rayleigh_benard_convection const&)
29 auto operator=(rayleigh_benard_convection&&) noexcept
31 //============================================================================
32 auto evaluate(pos_type const& x, real_type const t) const -> tensor_type override {
33 auto xi = x(0) - g(t);
34 auto rho = xi * xi + x(1) * x(1);
35 return {m_A / m_k * xi * std::sin(m_k * rho) * std::cos(x(2)),
36 m_A / m_k * x(1) * std::sin(m_k * rho) * std::cos(x(2)),
37 -m_A * std::sin(x(2)) * rho * std::cos(m_k * rho) +
38 2 / m_k * std::sin(m_k * rho)};
39 }
40 //----------------------------------------------------------------------------
41 auto in_domain(pos_type const& /*x*/, real_type const /*t*/) const
42 -> bool override {
43 return true;
44 }
45 //----------------------------------------------------------------------------
46 auto g(real_type const /*t*/) const -> real_type { return 0; }
47 //----------------------------------------------------------------------------
48 auto k() -> real_type& {
49 return m_k;
50 }
51 auto k() const {
52 return m_k;
53 }
54 auto A() -> real_type& {
55 return m_A;
56 }
57 auto A() const {
58 return m_A;
59 }
60};
61//==============================================================================
62} // namespace tatooine::analytical::numerical
63//==============================================================================
64#endif
Definition: abcflow.h:7
Definition: rayleigh_benard_convection.h:10
rayleigh_benard_convection(rayleigh_benard_convection &&) noexcept=default
Real real_type
Definition: rayleigh_benard_convection.h:13
Real m_k
Definition: rayleigh_benard_convection.h:18
rayleigh_benard_convection(real_type A, real_type k)
Definition: rayleigh_benard_convection.h:23
rayleigh_benard_convection(rayleigh_benard_convection const &)=default
Real m_A
Definition: rayleigh_benard_convection.h:18
auto A() -> real_type &
Definition: rayleigh_benard_convection.h:54
auto k() -> real_type &
Definition: rayleigh_benard_convection.h:48
auto A() const
Definition: rayleigh_benard_convection.h:57
auto g(real_type const) const -> real_type
Definition: rayleigh_benard_convection.h:46
auto in_domain(pos_type const &, real_type const) const -> bool override
Definition: rayleigh_benard_convection.h:41
auto k() const
Definition: rayleigh_benard_convection.h:51
rayleigh_benard_convection()
Definition: rayleigh_benard_convection.h:21
auto evaluate(pos_type const &x, real_type const t) const -> tensor_type override
Definition: rayleigh_benard_convection.h:32
Definition: field.h:134
vec< real_type, NumDimensions > pos_type
Definition: field.h:20
Tensor tensor_type
Definition: field.h:18
Definition: vec.h:12