|
6 | 6 | real(wp) :: factor |
7 | 7 | real(wp) :: r0, alpha, r2 |
8 | 8 | real(wp) :: sinA, cosA |
9 | | - |
10 | 9 | real(wp) :: r_sq |
11 | 10 |
|
12 | 11 | ! # 207 |
|
18 | 17 | #:enddef |
19 | 18 |
|
20 | 19 | #:def Hardcoded2D() |
21 | | - |
22 | 20 | select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case |
23 | | - |
24 | 21 | case (200) |
25 | 22 | if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then |
26 | 23 | ! Volume Fractions |
|
107 | 104 | pInt = pref + rhoH*9.81_wp*(1.2_wp - intH) |
108 | 105 | q_prim_vf(E_idx)%sf(i, j, 0) = pInt + rhoL*9.81_wp*(intH - y_cc(j)) |
109 | 106 | end if |
110 | | - |
111 | 107 | case (205) ! 2D lung wave interaction problem |
112 | | - h = 0.0_wp !non dim origin y |
113 | | - lam = 1.0_wp !non dim lambda |
114 | | - amp = patch_icpp(patch_id)%a(2) !to be changed later! !non dim amplitude |
| 108 | + h = 0.0_wp ! non dim origin y |
| 109 | + lam = 1.0_wp ! non dim lambda |
| 110 | + amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude |
115 | 111 |
|
116 | 112 | intH = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h |
117 | 113 |
|
|
122 | 118 | q_prim_vf(advxb)%sf(i, j, 0) = patch_icpp(1)%alpha(1) |
123 | 119 | q_prim_vf(advxe)%sf(i, j, 0) = patch_icpp(1)%alpha(2) |
124 | 120 | end if |
125 | | - |
126 | 121 | case (206) ! 2D lung wave interaction problem - horizontal domain |
127 | | - h = 0.0_wp !non dim origin y |
128 | | - lam = 1.0_wp !non dim lambda |
| 122 | + h = 0.0_wp ! non dim origin y |
| 123 | + lam = 1.0_wp ! non dim lambda |
129 | 124 | amp = patch_icpp(patch_id)%a(2) |
130 | 125 |
|
131 | 126 | intL = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h |
132 | 127 |
|
133 | | - if (x_cc(i) > intL) then !this is the liquid |
| 128 | + if (x_cc(i) > intL) then ! this is the liquid |
134 | 129 | q_prim_vf(contxb)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1) |
135 | 130 | q_prim_vf(contxe)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2) |
136 | 131 | q_prim_vf(E_idx)%sf(i, j, 0) = patch_icpp(1)%pres |
137 | 132 | q_prim_vf(advxb)%sf(i, j, 0) = patch_icpp(1)%alpha(1) |
138 | 133 | q_prim_vf(advxe)%sf(i, j, 0) = patch_icpp(1)%alpha(2) |
139 | 134 | end if |
140 | | - |
141 | 135 | case (207) ! Kelvin Helmholtz Instability |
142 | 136 | sigma = 0.05_wp/sqrt(2.0_wp) |
143 | 137 | gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2)) |
144 | 138 | gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2)) |
145 | | - q_prim_vf(momxb + 1)%sf(i, j, 0) = & |
146 | | - 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2) |
147 | | - |
| 139 | + q_prim_vf(momxb + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2) |
148 | 140 | case (208) ! Richtmeyer Meshkov Instability |
149 | 141 | lam = 1.0_wp |
150 | 142 | eps = 1.0e-6_wp |
|
160 | 152 | q_prim_vf(advxb)%sf(i, j, 0) = alpha_sf6 |
161 | 153 | q_prim_vf(advxe)%sf(i, j, 0) = alpha_air |
162 | 154 | end if |
163 | | - |
164 | 155 | case (250) ! MHD Orszag-Tang vortex |
165 | 156 | ! gamma = 5/3 |
166 | 157 | ! rho = 25/(36*pi) |
|
173 | 164 |
|
174 | 165 | q_prim_vf(B_idx%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi) |
175 | 166 | q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi) |
176 | | - |
177 | 167 | case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1] |
178 | 168 | if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then |
179 | 169 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01 |
180 | 170 | q_prim_vf(E_idx)%sf(i, j, 0) = 1.0 |
181 | | - elseif (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then |
| 171 | + else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then |
182 | 172 | ! Linear interpolation between r=0.08 and r=1.0 |
183 | 173 | factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp) |
184 | 174 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor) |
|
223 | 213 | 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 | 214 | 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 | 215 | end if |
226 | | - |
227 | 216 | case (253) ! MHD Smooth Magnetic Vortex |
228 | 217 | ! Section 5.2 of |
229 | 218 | ! Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics |
|
238 | 227 | 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 | 228 |
|
240 | 229 | ! pressure |
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 | | - |
243 | | - case (260) ! Gaussian Divergence Pulse |
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. |
| 230 | + q_prim_vf(E_idx)%sf(i, j, & |
| 231 | + & 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) |
| 232 | + case (260) ! Gaussian Divergence Pulse |
| 233 | + ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) |
| 234 | + ! => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma) |
| 235 | + ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] |
| 236 | + ! \psi is initialized to zero everywhere. |
248 | 237 |
|
249 | 238 | eps_mhd = patch_icpp(patch_id)%a(2) |
250 | 239 | sigma = patch_icpp(patch_id)%a(3) |
251 | 240 | C_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp |
252 | 241 |
|
253 | 242 | ! B-field |
254 | 243 | q_prim_vf(B_idx%beg)%sf(i, j, 0) = 1._wp + C_mhd*erf((x_cc(i) - 0.5_wp)/sigma) |
255 | | - |
256 | | - case (261) ! Blob |
| 244 | + case (261) ! Blob |
257 | 245 | r0 = 1._wp/sqrt(8._wp) |
258 | 246 | r2 = x_cc(i)**2 + y_cc(j)**2 |
259 | 247 | r = sqrt(r2) |
|
264 | 252 | ! q_prim_vf(B_idx%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp) |
265 | 253 | ! 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 | 254 | end if |
267 | | - |
268 | | - case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°) |
269 | | - ! rotate by α = atan(2) |
| 255 | + case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°) |
| 256 | + ! rotate by \alpha = atan(2) |
270 | 257 | alpha = atan(2._wp) |
271 | 258 | cosA = cos(alpha) |
272 | 259 | sinA = sin(alpha) |
273 | 260 | ! projection along shock normal |
274 | 261 | r = x_cc(i)*cosA + y_cc(j)*sinA |
275 | 262 |
|
276 | 263 | if (r <= 0.5_wp) then |
277 | | - ! LEFT state: ρ=1, v∥=+10, v⊥=0, p=20, B∥=B⊥=5/√(4π) |
| 264 | + ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi) |
278 | 265 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp |
279 | 266 | q_prim_vf(momxb)%sf(i, j, 0) = 10._wp*cosA |
280 | 267 | q_prim_vf(momxb + 1)%sf(i, j, 0) = 10._wp*sinA |
281 | 268 | q_prim_vf(E_idx)%sf(i, j, 0) = 20._wp |
282 | | - q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA & |
283 | | - - (5._wp/sqrt(4._wp*pi))*sinA |
284 | | - q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA & |
285 | | - + (5._wp/sqrt(4._wp*pi))*cosA |
| 269 | + q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA - (5._wp/sqrt(4._wp*pi))*sinA |
| 270 | + q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA + (5._wp/sqrt(4._wp*pi))*cosA |
286 | 271 | else |
287 | | - ! RIGHT state: ρ=1, v∥=−10, v⊥=0, p=1, B∥=B⊥=5/√(4π) |
| 272 | + ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi) |
288 | 273 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp |
289 | 274 | q_prim_vf(momxb)%sf(i, j, 0) = -10._wp*cosA |
290 | 275 | q_prim_vf(momxb + 1)%sf(i, j, 0) = -10._wp*sinA |
291 | 276 | q_prim_vf(E_idx)%sf(i, j, 0) = 1._wp |
292 | | - q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA & |
293 | | - - (5._wp/sqrt(4._wp*pi))*sinA |
294 | | - q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA & |
295 | | - + (5._wp/sqrt(4._wp*pi))*cosA |
| 277 | + q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA - (5._wp/sqrt(4._wp*pi))*sinA |
| 278 | + q_prim_vf(B_idx%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sinA + (5._wp/sqrt(4._wp*pi))*cosA |
296 | 279 | end if |
297 | 280 | ! v^z and B^z remain zero by default |
298 | | - |
299 | 281 | case (270) |
300 | 282 | ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain |
301 | 283 | @: HardcodedReadValues() |
302 | | - |
303 | 284 | case (280) |
304 | 285 | ! This is patch is hard-coded for test suite optimization used in the |
305 | 286 | ! 2D_isentropicvortex case: |
306 | 287 | ! This analytic patch uses geometry 2 |
307 | 288 | if (patch_id == 1) then |
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 | | - 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 |
310 | | - q_prim_vf(momxb + 0)%sf(i, j, 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
311 | | - q_prim_vf(momxb + 1)%sf(i, j, 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
| 289 | + q_prim_vf(E_idx)%sf(i, j, & |
| 290 | + & 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) & |
| 291 | + & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0) |
| 292 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 293 | + & 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) & |
| 294 | + & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4 |
| 295 | + q_prim_vf(momxb + 0)%sf(i, j, & |
| 296 | + & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) & |
| 297 | + & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
| 298 | + q_prim_vf(momxb + 1)%sf(i, j, & |
| 299 | + & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) & |
| 300 | + & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
312 | 301 | end if |
313 | | - |
314 | 302 | case (281) |
315 | 303 | ! This is patch is hard-coded for test suite optimization used in the |
316 | 304 | ! 2D_acoustic_pulse case: |
317 | 305 | ! This analytic patch uses geometry 2 |
318 | 306 | if (patch_id == 2) then |
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 | | - 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)) |
| 307 | + q_prim_vf(E_idx)%sf(i, j, & |
| 308 | + & 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)) |
| 309 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 310 | + & 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 | 311 | end if |
322 | | - |
323 | 312 | case (282) |
324 | 313 | ! This is patch is hard-coded for test suite optimization used in the |
325 | 314 | ! 2D_zero_circ_vortex case: |
326 | 315 | ! This analytic patch uses geometry 2 |
327 | 316 | if (patch_id == 2) then |
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 | | - 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)) |
330 | | - q_prim_vf(momxb + 0)%sf(i, j, 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))) |
| 317 | + q_prim_vf(E_idx)%sf(i, j, & |
| 318 | + & 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)) |
| 319 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 320 | + & 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)) |
| 321 | + q_prim_vf(momxb + 0)%sf(i, j, & |
| 322 | + & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))) |
331 | 323 | q_prim_vf(momxb + 1)%sf(i, j, 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))) |
332 | 324 | end if |
333 | | - |
334 | 325 | case default |
335 | 326 | if (proc_rank == 0) then |
336 | 327 | call s_int_to_str(patch_id, iStr) |
337 | | - call s_mpi_abort("Invalid hcid specified for patch "//trim(iStr)) |
| 328 | + call s_mpi_abort("Invalid hcid specified for patch " // trim(iStr)) |
338 | 329 | end if |
339 | | - |
340 | 330 | end select |
341 | | - |
342 | 331 | #:enddef |
0 commit comments