waves
Basic FE playground
wF0El.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 University of Liège
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef WF0EL_H
18 #define WF0EL_H
19 
20 #include "flow.h"
21 #include "wObserver.h"
22 #include "wElement.h"
23 #include <vector>
24 
25 namespace flow
26 {
27 
31 class FLOW_API F0El : public fwk::Observer
32 {
33 public:
34  F0El() : Observer() {}
35  virtual ~F0El() {}
36 
37  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
38  size_t k) const = 0;
39  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
40  size_t k) const = 0;
41 };
42 
46 class FLOW_API F0ElC : public F0El
47 {
48  double v;
49 
50 public:
51  F0ElC(double _v) : F0El(), v(_v) {}
52  virtual void update(double _v) override;
53 
54  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
55  size_t k) const override;
56  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
57  size_t k) const override;
58 };
59 
67 class FLOW_API F0ElRho : public F0El
68 {
69  double gamma;
70  double mInf;
71  double gradUC;
72 
73 public:
74  F0ElRho(double _mInf, double _mC2 = 5) : F0El(), gamma(1.4), mInf(_mInf)
75  {
76  gradUC = sqrt(_mC2 * (1 / (mInf * mInf) + (gamma - 1) / 2) / (1 + (gamma - 1) / 2 * _mC2));
77  }
78 
79  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
80  size_t k) const override;
81  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
82  size_t k) const override;
83 };
84 
88 class FLOW_API F0ElRhoL : public F0El
89 {
90 public:
91  F0ElRhoL() : F0El() {}
92 
93  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
94  size_t k) const override;
95  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
96  size_t k) const override;
97 };
98 
104 class FLOW_API F0ElMach : public F0El
105 {
106  double gamma;
107  double mInf;
108 
109 public:
110  F0ElMach(double _mInf) : F0El(), gamma(1.4), mInf(_mInf) {}
111 
112  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
113  size_t k) const override;
114  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
115  size_t k) const override;
116 };
117 
121 class FLOW_API F0ElMachL : public F0El
122 {
123 public:
124  F0ElMachL() : F0El() {}
125 
126  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
127  size_t k) const override;
128  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
129  size_t k) const override;
130 };
131 
137 class FLOW_API F0ElCp : public F0El
138 {
139  double gamma;
140  double mInf;
141 
142 public:
143  F0ElCp(double _mInf) : F0El(), gamma(1.4), mInf(_mInf) {}
144 
145  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
146  size_t k) const override;
147  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
148  size_t k) const override;
149 };
150 
154 class FLOW_API F0ElCpL : public F0El
155 {
156 
157 public:
158  F0ElCpL() : F0El() {}
159 
160  virtual double eval(tbox::Element const &e, std::vector<double> const &u,
161  size_t k) const override;
162  virtual double evalGrad(tbox::Element const &e, std::vector<double> const &u,
163  size_t k) const override;
164 };
165 
166 } // namespace flow
167 
168 #endif //WF0EL_H
flow::F0ElCp::F0ElCp
F0ElCp(double _mInf)
Definition: wF0El.h:143
flow::F0ElCp::gamma
double gamma
heat capacity ratio (diatomic gas only)
Definition: wF0El.h:139
flow::F0ElMach::gamma
double gamma
heat capacity ratio (diatomic gas only)
Definition: wF0El.h:106
flow::F0ElRho::F0ElRho
F0ElRho(double _mInf, double _mC2=5)
Definition: wF0El.h:74
flow::F0El::~F0El
virtual ~F0El()
Definition: wF0El.h:35
flow::F0ElMach::mInf
double mInf
freestream Mach number
Definition: wF0El.h:107
flow::F0El::F0El
F0El()
Definition: wF0El.h:34
FLOW_API
#define FLOW_API
Definition: flow.h:29
flow::F0ElC::F0ElC
F0ElC(double _v)
Definition: wF0El.h:51
flow::F0ElRho::gamma
double gamma
heat capacity ratio (diatomic gas only)
Definition: wF0El.h:69
flow
Namespace for flow module.
Definition: flow.h:37
flow::F0ElRho::mInf
double mInf
freestream Mach number
Definition: wF0El.h:70
flow::F0ElRhoL::F0ElRhoL
F0ElRhoL()
Definition: wF0El.h:91
flow::F0ElMach
Nonlinear Mach number.
Definition: wF0El.h:104
flow::F0ElCpL::F0ElCpL
F0ElCpL()
Definition: wF0El.h:158
flow::F0ElRho::gradUC
double gradUC
critical velocity
Definition: wF0El.h:71
flow::F0ElCp
Nonlinear pressure coefficient.
Definition: wF0El.h:137
flow::F0ElC
Constant function.
Definition: wF0El.h:46
flow::F0ElMachL::F0ElMachL
F0ElMachL()
Definition: wF0El.h:124
flow::F0ElMachL
Linear Mach number (constant)
Definition: wF0El.h:121
flow::F0ElRhoL
Linear density (constant)
Definition: wF0El.h:88
flow::F0ElRho
Nonlinear density.
Definition: wF0El.h:67
flow::F0ElCpL
Linear pressure coefficient.
Definition: wF0El.h:154
flow::F0ElCp::mInf
double mInf
freestream Mach number
Definition: wF0El.h:140
flow::F0ElMach::F0ElMach
F0ElMach(double _mInf)
Definition: wF0El.h:110
flow::F0ElC::v
double v
Definition: wF0El.h:48
flow::F0El
Scalar function to be integrated over an element.
Definition: wF0El.h:31
flow.h