1#ifndef NS_SOLUTIONS_HPP
2#define NS_SOLUTIONS_HPP
10 namespace NavierStokesSolutions
15 struct IExactSolution {
20 inline std::string
name()
const {
35 virtual Eigen::Vector2d
momentumForcingTerm(
const Eigen::Vector2d & x,
const double & t = 0)
const = 0;
37 virtual Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const = 0;
38 virtual double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const = 0;
39 virtual Eigen::Matrix2d
velocityGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const = 0;
40 virtual Eigen::Vector2d
pressureGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const = 0;
56 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
57 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
58 Eigen::Matrix2d
velocityGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
59 Eigen::Vector2d
pressureGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
70 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
71 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
72 Eigen::Matrix2d
velocityGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
73 Eigen::Vector2d
pressureGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
84 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
85 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
86 Eigen::Matrix2d
velocityGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
87 Eigen::Vector2d
pressureGradient(
const Eigen::Vector2d & x,
const double & t = 0)
const;
98 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
99 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
113 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
114 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
128 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
129 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
143 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
144 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
158 return std::array<double, 2>{2. * x[0] - 0.5, 2. * x[1]};
163 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
164 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
182 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
183 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
197 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
198 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
212 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
213 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
229 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
230 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
246 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
247 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
265 Eigen::Vector2d
velocity(
const Eigen::Vector2d & x,
const double & t = 0)
const;
266 double pressure(
const Eigen::Vector2d & x,
const double & t = 0)
const;
std::function< std::array< double, 2 >(const std::array< double, 2 > &)> TransformationType
Definition MeshBuilder2D.hpp:174
Definition ddr-klplate.hpp:27
Definition ns-solutions.hpp:15
double viscosity() const
Return the viscosity.
Definition ns-solutions.hpp:33
bool isStokes() const
Definition ns-solutions.hpp:26
bool m_is_stokes
Definition ns-solutions.hpp:64
virtual ~IExactSolution()
virtual double pressure(const Eigen::Vector2d &x, const double &t=0) const =0
std::string name() const
Return the solution name.
Definition ns-solutions.hpp:22
virtual Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const =0
virtual double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const =0
double m_viscosity
Definition ns-solutions.hpp:65
std::string m_name
Definition ns-solutions.hpp:63
virtual Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const =0
virtual Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const =0
IExactSolution(std::string name, bool is_stokes, double viscosity, bool isNonNewtonian=false, double flow_index=2.0, double degen_param=0.0)
Definition ns-solutions.cpp:17
virtual Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const =0
Definition ns-solutions.hpp:175
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
static Mesh2D::MeshBuilder::TransformationType domain_transformation
A function to transform the unit domain to .
Definition ns-solutions.hpp:180
Kovasznay(const double &viscosity, std::ostream &output=std::cout)
Construct the class given the Reynolds number.
Definition ns-solutions.hpp:283
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:88
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:264
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
LinearTemporal(const double &viscosity)
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:74
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:161
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
OnlyPressure(const double &viscosity)
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:247
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
OnlyTimeDep(const double &viscosity)
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:146
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
PressureRobustNavierStokes(const double &viscosity)
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:131
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
PressureRobustStokes(const double &viscosity)
Definition ns-solutions.hpp:102
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:200
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
TimeDependentNavierStokes(const double &viscosity)
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:215
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
TimeDependentStokes(const double &viscosity)
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:230
TrigTimeDep(const double &viscosity)
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Definition ns-solutions.hpp:116
Eigen::Vector2d momentumForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d pressureGradient(const Eigen::Vector2d &x, const double &t=0) const
double compressibilityForcingTerm(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Vector2d velocity(const Eigen::Vector2d &x, const double &t=0) const
double pressure(const Eigen::Vector2d &x, const double &t=0) const
Eigen::Matrix2d velocityGradient(const Eigen::Vector2d &x, const double &t=0) const