/home/runner/work/amr-wind/amr-wind/amr-wind/wind_energy/ShearStress.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/wind_energy/ShearStress.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ShearStress.H
Go to the documentation of this file.
1#ifndef ShearStress_H
2#define ShearStress_H
3
5#include "AMReX_REAL.H"
6
7using namespace amrex::literals;
8
19
20namespace amr_wind {
21
23{
25 : utau2(mo.utau * mo.utau)
26 , u_mean(mo.vel_mean[0])
27 , v_mean(mo.vel_mean[1])
28 , wspd_mean(mo.vmag_mean)
30 , theta_surface(mo.surf_temp)
31 , term1(mo.utau * mo.kappa / mo.phi_h())
32 {}
33
34 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
35 calc_vel_x(amrex::Real /* u */, amrex::Real /* wspd */) const
36 {
37 return u_mean / wspd_mean * utau2;
38 };
39
40 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
41 calc_vel_y(amrex::Real /* u */, amrex::Real /* wspd */) const
42 {
43 return v_mean / wspd_mean * utau2;
44 };
45
46 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
47 calc_theta(amrex::Real /* wspd */, amrex::Real /* theta */) const
48 {
49 return term1 * (theta_mean - theta_surface);
50 };
51
52 amrex::Real utau2;
53 amrex::Real u_mean;
54 amrex::Real v_mean;
55 amrex::Real wspd_mean;
56 amrex::Real theta_mean;
57 amrex::Real theta_surface;
58 amrex::Real term1;
59};
60
62{
64 : utau2(mo.utau * mo.utau)
65 , theta_surface(mo.surf_temp)
66 , term1(mo.utau * mo.kappa / mo.phi_h())
67 {}
68
69 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
70 calc_vel_x(amrex::Real u, amrex::Real wspd) const
71 {
72 return u / amrex::max<amrex::Real>(wspd, small_vel) * utau2;
73 };
74
75 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
76 calc_vel_y(amrex::Real v, amrex::Real wspd) const
77 {
78 return v / amrex::max<amrex::Real>(wspd, small_vel) * utau2;
79 };
80
81 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
82 calc_theta(amrex::Real /* wspd */, amrex::Real theta) const
83 {
84 return term1 * (theta - theta_surface);
85 };
86
87 amrex::Real utau2;
88 amrex::Real theta_surface;
89 amrex::Real term1;
90 amrex::Real small_vel{1.0e-6_rt};
91};
92
94{
96 : utau2(mo.utau * mo.utau)
97 , wspd_mean(mo.vmag_mean)
98 , theta_surface(mo.surf_temp)
99 , term1(mo.utau * mo.kappa / mo.phi_h())
100 {}
101
102 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
103 calc_vel_x(amrex::Real u, amrex::Real /* wspd */) const
104 {
105 return u / wspd_mean * utau2;
106 };
107
108 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
109 calc_vel_y(amrex::Real v, amrex::Real /* wspd */) const
110 {
111 return v / wspd_mean * utau2;
112 };
113
114 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
115 calc_theta(amrex::Real /* wspd */, amrex::Real theta) const
116 {
117 return term1 * (theta - theta_surface);
118 };
119
120 amrex::Real utau2;
121 amrex::Real wspd_mean;
122 amrex::Real theta_surface;
123 amrex::Real term1;
124};
125
127{
129 : utau2(mo.utau * mo.utau)
130 , u_mean(mo.vel_mean[0])
131 , v_mean(mo.vel_mean[1])
132 , wspd_mean(mo.vmag_mean)
133 , theta_surface(mo.surf_temp)
135 , term1(mo.utau * mo.kappa / (mo.vmag_mean * mo.phi_h()))
136 {}
137
138 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
139 calc_vel_x(amrex::Real u, amrex::Real wspd) const
140 {
141 return ((u - u_mean) * wspd_mean + wspd * u_mean) /
143 };
144
145 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
146 calc_vel_y(amrex::Real v, amrex::Real wspd) const
147 {
148 return ((v - v_mean) * wspd_mean + wspd * v_mean) /
150 };
151
152 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
153 calc_theta(amrex::Real wspd, amrex::Real theta) const
154 {
155 const amrex::Real num1 = (theta - theta_mean) * wspd_mean;
156 const amrex::Real num2 = (theta_mean - theta_surface) * wspd;
157 return term1 * (num1 + num2);
158 };
159
160 amrex::Real utau2;
161 amrex::Real u_mean;
162 amrex::Real v_mean;
163 amrex::Real wspd_mean;
164 amrex::Real theta_surface;
165 amrex::Real theta_mean;
166 amrex::Real term1;
167};
168
170{
172 : wspd_mean(mo.vmag_mean)
174 , theta_surface(mo.surf_temp)
175 , temp_flux_surface(mo.surf_temp_flux)
176 , alg_type(mo.alg_type)
177 {}
178
179 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
180 calc_vel_x(amrex::Real u, amrex::Real wspd) const
181 {
182 amrex::Real Cd = 0.001_rt;
183 const amrex::Real c = 7.0e-5_rt;
184 if (wspd_mean <= 5.0_rt) {
185 Cd = 0.001_rt;
186 } else if (wspd_mean < 25.0_rt && wspd_mean > 5.0_rt) {
187 Cd = 0.001_rt + c * (wspd_mean - 5.0_rt);
188 } else {
189 Cd = 0.0024_rt;
190 }
191
192 return Cd * u * wspd;
193 }
194
195 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
196 calc_vel_y(amrex::Real v, amrex::Real wspd) const
197 {
198 amrex::Real Cd = 0.001_rt;
199 const amrex::Real c = 7.0e-5_rt;
200 if (wspd_mean <= 5) {
201 Cd = 0.001_rt;
202 } else if (wspd_mean < 25.0_rt && wspd_mean > 5.0_rt) {
203 Cd = 0.001_rt + c * (wspd_mean - 5.0_rt);
204 } else {
205 Cd = 0.0024_rt;
206 }
207
208 return Cd * v * wspd;
209 };
210
211 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
212 calc_theta(amrex::Real /* wspd */, amrex::Real /* theta */) const
213 {
214 amrex::Real flux = 0.0_rt;
215 switch (alg_type) {
217 flux = temp_flux_surface;
218 break;
220 flux = 0.0012_rt * wspd_mean * (theta_surface - theta_mean);
221 break;
222 }
223 return flux;
224 };
225
226 amrex::Real wspd_mean;
227 amrex::Real theta_mean;
228 amrex::Real theta_surface;
229 amrex::Real temp_flux_surface;
231};
232
233} // namespace amr_wind
234
235#endif /* ShearStress_H */
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition MOData.H:24
ThetaCalcType
Definition MOData.H:25
@ SURFACE_TEMPERATURE
Surface temperature specified.
Definition MOData.H:27
@ HEAT_FLUX
Heat-flux specified.
Definition MOData.H:26
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_y(amrex::Real, amrex::Real) const
Definition ShearStress.H:41
amrex::Real utau2
Definition ShearStress.H:52
amrex::Real theta_surface
Definition ShearStress.H:57
amrex::Real wspd_mean
Definition ShearStress.H:55
ShearStressConstant(const amr_wind::MOData &mo)
Definition ShearStress.H:24
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_theta(amrex::Real, amrex::Real) const
Definition ShearStress.H:47
amrex::Real v_mean
Definition ShearStress.H:54
amrex::Real theta_mean
Definition ShearStress.H:56
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_x(amrex::Real, amrex::Real) const
Definition ShearStress.H:35
amrex::Real term1
Definition ShearStress.H:58
amrex::Real u_mean
Definition ShearStress.H:53
amr_wind::MOData::ThetaCalcType alg_type
Definition ShearStress.H:230
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_theta(amrex::Real, amrex::Real) const
Definition ShearStress.H:212
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_y(amrex::Real v, amrex::Real wspd) const
Definition ShearStress.H:196
amrex::Real wspd_mean
Definition ShearStress.H:226
amrex::Real theta_surface
Definition ShearStress.H:228
amrex::Real temp_flux_surface
Definition ShearStress.H:229
ShearStressDonelan(const amr_wind::MOData &mo)
Definition ShearStress.H:171
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_x(amrex::Real u, amrex::Real wspd) const
Definition ShearStress.H:180
amrex::Real theta_mean
Definition ShearStress.H:227
amrex::Real small_vel
Definition ShearStress.H:90
ShearStressLocal(const amr_wind::MOData &mo)
Definition ShearStress.H:63
amrex::Real term1
Definition ShearStress.H:89
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_x(amrex::Real u, amrex::Real wspd) const
Definition ShearStress.H:70
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_theta(amrex::Real, amrex::Real theta) const
Definition ShearStress.H:82
amrex::Real theta_surface
Definition ShearStress.H:88
amrex::Real utau2
Definition ShearStress.H:87
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_y(amrex::Real v, amrex::Real wspd) const
Definition ShearStress.H:76
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_y(amrex::Real v, amrex::Real wspd) const
Definition ShearStress.H:146
ShearStressMoeng(const amr_wind::MOData &mo)
Definition ShearStress.H:128
amrex::Real theta_surface
Definition ShearStress.H:164
amrex::Real theta_mean
Definition ShearStress.H:165
amrex::Real utau2
Definition ShearStress.H:160
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_x(amrex::Real u, amrex::Real wspd) const
Definition ShearStress.H:139
amrex::Real wspd_mean
Definition ShearStress.H:163
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_theta(amrex::Real wspd, amrex::Real theta) const
Definition ShearStress.H:153
amrex::Real v_mean
Definition ShearStress.H:162
amrex::Real u_mean
Definition ShearStress.H:161
amrex::Real term1
Definition ShearStress.H:166
amrex::Real utau2
Definition ShearStress.H:120
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_y(amrex::Real v, amrex::Real) const
Definition ShearStress.H:109
ShearStressSchumann(const amr_wind::MOData &mo)
Definition ShearStress.H:95
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_vel_x(amrex::Real u, amrex::Real) const
Definition ShearStress.H:103
amrex::Real theta_surface
Definition ShearStress.H:122
amrex::Real wspd_mean
Definition ShearStress.H:121
amrex::Real term1
Definition ShearStress.H:123
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_theta(amrex::Real, amrex::Real theta) const
Definition ShearStress.H:115