|
1 | 1 | #:def Hardcoded2DVariables() |
2 | | - ! any declaration of intermediate variables here |
| 2 | + ! Place any declaration of intermediate variables here |
3 | 3 | real(wp) :: eps, eps_mhd, C_mhd |
4 | 4 | real(wp) :: r, rmax, gam, umax, p0 |
5 | 5 | real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph |
|
9 | 9 |
|
10 | 10 | real(wp) :: r_sq |
11 | 11 |
|
12 | | - ! 207 |
| 12 | + ! # 207 |
13 | 13 | real(wp) :: sigma, gauss1, gauss2 |
14 | | - ! 208 |
| 14 | + ! # 208 |
15 | 15 | real(wp) :: ei, d, fsm, alpha_air, alpha_sf6 |
16 | 16 |
|
17 | 17 | eps = 1.e-9_wp |
|
23 | 23 |
|
24 | 24 | case (200) |
25 | 25 | if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then |
26 | | - ! Fractions |
| 26 | + ! Volume Fractions |
27 | 27 | q_prim_vf(advxb)%sf(i, j, 0) = eps |
28 | 28 | q_prim_vf(advxe)%sf(i, j, 0) = 1._wp - eps |
29 | | - ! |
| 29 | + ! Denssities |
30 | 30 | q_prim_vf(contxb)%sf(i, j, 0) = eps*1000._wp |
31 | 31 | q_prim_vf(contxe)%sf(i, j, 0) = (1._wp - eps)*1._wp |
32 | | - ! |
| 32 | + ! Pressure |
33 | 33 | q_prim_vf(E_idx)%sf(i, j, 0) = 1000._wp |
34 | 34 | end if |
35 | 35 | case (202) ! Gresho vortex (Gouasmi et al 2022 JCP) |
|
149 | 149 | lam = 1.0_wp |
150 | 150 | eps = 1.0e-6_wp |
151 | 151 | ei = 5.0_wp |
152 | | - ! function to smooth out sharp discontinuity in the interface |
| 152 | + ! Smoothening function to smooth out sharp discontinuity in the interface |
153 | 153 | if (x_cc(i) <= 0.7_wp*lam) then |
154 | 154 | d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp))) |
155 | 155 | fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy)))) |
|
162 | 162 | end if |
163 | 163 |
|
164 | 164 | case (250) ! MHD Orszag-Tang vortex |
165 | | - ! = 5/3 |
166 | | - ! = 25/(36*pi) |
167 | | - ! = 5/(12*pi) |
168 | | - ! = (-sin(2*pi*y), sin(2*pi*x), 0) |
169 | | - ! = (-sin(2*pi*y)/sqrt(4*pi), sin(4*pi*x)/sqrt(4*pi), 0) |
| 165 | + ! gamma = 5/3 |
| 166 | + ! rho = 25/(36*pi) |
| 167 | + ! p = 5/(12*pi) |
| 168 | + ! v = (-sin(2*pi*y), sin(2*pi*x), 0) |
| 169 | + ! B = (-sin(2*pi*y)/sqrt(4*pi), sin(4*pi*x)/sqrt(4*pi), 0) |
170 | 170 |
|
171 | 171 | q_prim_vf(momxb)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j)) |
172 | 172 | q_prim_vf(momxb + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i)) |
|
179 | 179 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01 |
180 | 180 | q_prim_vf(E_idx)%sf(i, j, 0) = 1.0 |
181 | 181 | elseif (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then |
182 | | - ! interpolation between r=0.08 and r=1.0 |
| 182 | + ! Linear interpolation between r=0.08 and r=1.0 |
183 | 183 | factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp) |
184 | 184 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor) |
185 | 185 | q_prim_vf(E_idx)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor) |
|
188 | 188 | q_prim_vf(E_idx)%sf(i, j, 0) = 3.e-5_wp |
189 | 189 | end if |
190 | 190 |
|
191 | | - ! 252 is for the 2D MHD Rotor problem |
| 191 | + ! case 252 is for the 2D MHD Rotor problem |
192 | 192 | case (252) ! 2D MHD Rotor Problem |
193 | | - ! conditions are set in the JSON file. |
194 | | - ! case imposes the dense, rotating cylinder. |
| 193 | + ! Ambient conditions are set in the JSON file. |
| 194 | + ! This case imposes the dense, rotating cylinder. |
195 | 195 | ! |
196 | | - ! = 1.4 |
197 | | - ! medium (r > 0.1): |
198 | | - ! = 1, p = 1, v = 0, B = (1,0,0) |
199 | | - ! (r <= 0.1): |
200 | | - ! = 10, p = 1 |
201 | | - ! has angular velocity w=20, giving v_tan=2 at r=0.1 |
202 | | - |
203 | | - ! distance squared from the center |
| 196 | + ! gamma = 1.4 |
| 197 | + ! Ambient medium (r > 0.1): |
| 198 | + ! rho = 1, p = 1, v = 0, B = (1,0,0) |
| 199 | + ! Rotor (r <= 0.1): |
| 200 | + ! rho = 10, p = 1 |
| 201 | + ! v has angular velocity w=20, giving v_tan=2 at r=0.1 |
| 202 | + |
| 203 | + ! Calculate distance squared from the center |
204 | 204 | r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2 |
205 | 205 |
|
206 | | - ! radius of 0.1 |
| 206 | + ! inner radius of 0.1 |
207 | 207 | if (r_sq <= 0.1**2) then |
208 | | - ! Inside the rotor -- |
209 | | - ! density uniformly to 10 |
| 208 | + ! -- Inside the rotor -- |
| 209 | + ! Set density uniformly to 10 |
210 | 210 | q_prim_vf(contxb)%sf(i, j, 0) = 10._wp |
211 | 211 |
|
212 | | - ! vup constant rotation of rate v=2 |
213 | | - ! = -omega * (y - y_c) |
214 | | - ! = omega * (x - x_c) |
| 212 | + ! Set vup constant rotation of rate v=2 |
| 213 | + ! v_x = -omega * (y - y_c) |
| 214 | + ! v_y = omega * (x - x_c) |
215 | 215 | q_prim_vf(momxb)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp) |
216 | 216 | q_prim_vf(momxb + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp) |
217 | 217 |
|
218 | | - ! width of 0.015 |
| 218 | + ! taper width of 0.015 |
219 | 219 | else if (r_sq <= 0.115**2) then |
220 | | - ! smooth the function between r = 0.1 and 0.115 |
| 220 | + ! linearly smooth the function between r = 0.1 and 0.115 |
221 | 221 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp) |
222 | 222 |
|
223 | 223 | q_prim_vf(momxb)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp) |
224 | 224 | q_prim_vf(momxb + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp) |
225 | 225 | end if |
226 | 226 |
|
227 | 227 | case (253) ! MHD Smooth Magnetic Vortex |
228 | | - ! 5.2 of |
229 | | - ! hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics |
230 | | - ! Ciuca, P. Fernandez, A. Christophe, N.C. Nguyen, J. Peraire |
| 228 | + ! Section 5.2 of |
| 229 | + ! Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics |
| 230 | + ! C. Ciuca, P. Fernandez, A. Christophe, N.C. Nguyen, J. Peraire |
231 | 231 |
|
232 | | - ! |
| 232 | + ! velocity |
233 | 233 | q_prim_vf(momxb)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)) |
234 | 234 | q_prim_vf(momxb + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)) |
235 | 235 |
|
236 | | - ! field |
| 236 | + ! magnetic field |
237 | 237 | q_prim_vf(B_idx%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi) |
238 | 238 | q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi) |
239 | 239 |
|
240 | | - ! |
| 240 | + ! pressure |
241 | 241 | q_prim_vf(E_idx)%sf(i, j, 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3) |
242 | 242 |
|
243 | 243 | case (260) ! Gaussian Divergence Pulse |
244 | | - ! = 1 + C * erf((x-0.5)/σ) |
245 | | - ! ∂Bx/∂x = C * (2/√π) * exp[-((x-0.5)/σ)**2] * (1/σ) |
246 | | - ! C = ε * σ * √π / 2 ⇒ ∂Bx/∂x = ε * exp[-((x-0.5)/σ)**2] |
247 | | - ! is initialized to zero everywhere. |
| 244 | + ! Bx(x) = 1 + C * erf((x-0.5)/σ) |
| 245 | + ! ⇒ ∂Bx/∂x = C * (2/√π) * exp[-((x-0.5)/σ)**2] * (1/σ) |
| 246 | + ! Choose C = ε * σ * √π / 2 ⇒ ∂Bx/∂x = ε * exp[-((x-0.5)/σ)**2] |
| 247 | + ! ψ is initialized to zero everywhere. |
248 | 248 |
|
249 | 249 | eps_mhd = patch_icpp(patch_id)%a(2) |
250 | 250 | sigma = patch_icpp(patch_id)%a(3) |
251 | 251 | C_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp |
252 | 252 |
|
253 | | - ! |
| 253 | + ! B-field |
254 | 254 | q_prim_vf(B_idx%beg)%sf(i, j, 0) = 1._wp + C_mhd*erf((x_cc(i) - 0.5_wp)/sigma) |
255 | 255 |
|
256 | 256 | case (261) ! Blob |
|
260 | 260 | alpha = r/r0 |
261 | 261 | if (alpha < 1) then |
262 | 262 | q_prim_vf(B_idx%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp) |
263 | | - ! = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp) |
264 | | - ! = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp) |
265 | | - ! = 6._wp - q_prim_vf(B_idx%beg)%sf(i,j,0)**2/2._wp |
| 263 | + ! q_prim_vf(B_idx%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp) |
| 264 | + ! q_prim_vf(B_idx%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp) |
| 265 | + ! q_prim_vf(E_idx)%sf(i,j,0) = 6._wp - q_prim_vf(B_idx%beg)%sf(i,j,0)**2/2._wp |
266 | 266 | end if |
267 | 267 |
|
268 | 268 | case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°) |
269 | | - ! by α = atan(2) |
| 269 | + ! rotate by α = atan(2) |
270 | 270 | alpha = atan(2._wp) |
271 | 271 | cosA = cos(alpha) |
272 | 272 | sinA = sin(alpha) |
273 | | - ! along shock normal |
| 273 | + ! projection along shock normal |
274 | 274 | r = x_cc(i)*cosA + y_cc(j)*sinA |
275 | 275 |
|
276 | 276 | if (r <= 0.5_wp) then |
277 | | - ! state: ρ=1, v∥=+10, v⊥=0, p=20, B∥=B⊥=5/√(4π) |
| 277 | + ! LEFT state: ρ=1, v∥=+10, v⊥=0, p=20, B∥=B⊥=5/√(4π) |
278 | 278 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp |
279 | 279 | q_prim_vf(momxb)%sf(i, j, 0) = 10._wp*cosA |
280 | 280 | q_prim_vf(momxb + 1)%sf(i, j, 0) = 10._wp*sinA |
|
284 | 284 | q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA & |
285 | 285 | + (5._wp/sqrt(4._wp*pi))*cosA |
286 | 286 | else |
287 | | - ! state: ρ=1, v∥=−10, v⊥=0, p=1, B∥=B⊥=5/√(4π) |
| 287 | + ! RIGHT state: ρ=1, v∥=−10, v⊥=0, p=1, B∥=B⊥=5/√(4π) |
288 | 288 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp |
289 | 289 | q_prim_vf(momxb)%sf(i, j, 0) = -10._wp*cosA |
290 | 290 | q_prim_vf(momxb + 1)%sf(i, j, 0) = -10._wp*sinA |
|
294 | 294 | q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA & |
295 | 295 | + (5._wp/sqrt(4._wp*pi))*cosA |
296 | 296 | end if |
297 | | - ! and B^z remain zero by default |
| 297 | + ! v^z and B^z remain zero by default |
298 | 298 |
|
299 | 299 | case (270) |
300 | | - ! hardcoded case extrudes a 1D profile to initialize a 2D simulation domain |
| 300 | + ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain |
301 | 301 | @: HardcodedReadValues() |
302 | 302 |
|
303 | 303 | case (280) |
304 | | - ! is patch is hard-coded for test suite optimization used in the |
305 | | - ! case: |
306 | | - ! analytic patch uses geometry 2 |
| 304 | + ! This is patch is hard-coded for test suite optimization used in the |
| 305 | + ! 2D_isentropicvortex case: |
| 306 | + ! This analytic patch uses geometry 2 |
307 | 307 | if (patch_id == 1) then |
308 | 308 | q_prim_vf(E_idx)%sf(i, j, 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0) |
309 | 309 | q_prim_vf(contxb + 0)%sf(i, j, 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4 |
|
312 | 312 | end if |
313 | 313 |
|
314 | 314 | case (281) |
315 | | - ! is patch is hard-coded for test suite optimization used in the |
316 | | - ! case: |
317 | | - ! analytic patch uses geometry 2 |
| 315 | + ! This is patch is hard-coded for test suite optimization used in the |
| 316 | + ! 2D_acoustic_pulse case: |
| 317 | + ! This analytic patch uses geometry 2 |
318 | 318 | if (patch_id == 2) then |
319 | 319 | q_prim_vf(E_idx)%sf(i, j, 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1)) |
320 | 320 | q_prim_vf(contxb + 0)%sf(i, j, 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1)) |
321 | 321 | end if |
322 | 322 |
|
323 | 323 | case (282) |
324 | | - ! is patch is hard-coded for test suite optimization used in the |
325 | | - ! case: |
326 | | - ! analytic patch uses geometry 2 |
| 324 | + ! This is patch is hard-coded for test suite optimization used in the |
| 325 | + ! 2D_zero_circ_vortex case: |
| 326 | + ! This analytic patch uses geometry 2 |
327 | 327 | if (patch_id == 2) then |
328 | 328 | q_prim_vf(E_idx)%sf(i, j, 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1)) |
329 | 329 | q_prim_vf(contxb + 0)%sf(i, j, 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1)) |
|
0 commit comments