|
109 | 109 | end if |
110 | 110 |
|
111 | 111 | 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 |
| 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 |
115 | 115 |
|
116 | 116 | intH = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h |
117 | 117 |
|
|
124 | 124 | end if |
125 | 125 |
|
126 | 126 | 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 |
| 127 | + h = 0.0_wp ! non dim origin y |
| 128 | + lam = 1.0_wp ! non dim lambda |
129 | 129 | amp = patch_icpp(patch_id)%a(2) |
130 | 130 |
|
131 | 131 | intL = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h |
132 | 132 |
|
133 | | - if (x_cc(i) > intL) then !this is the liquid |
| 133 | + if (x_cc(i) > intL) then ! this is the liquid |
134 | 134 | q_prim_vf(contxb)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1) |
135 | 135 | q_prim_vf(contxe)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2) |
136 | 136 | q_prim_vf(E_idx)%sf(i, j, 0) = patch_icpp(1)%pres |
|
142 | 142 | sigma = 0.05_wp/sqrt(2.0_wp) |
143 | 143 | gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2)) |
144 | 144 | 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) |
| 145 | + q_prim_vf(momxb + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2) |
147 | 146 |
|
148 | 147 | case (208) ! Richtmeyer Meshkov Instability |
149 | 148 | lam = 1.0_wp |
|
178 | 177 | if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then |
179 | 178 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01 |
180 | 179 | 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 |
| 180 | + else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then |
182 | 181 | ! Linear interpolation between r=0.08 and r=1.0 |
183 | 182 | factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp) |
184 | 183 | q_prim_vf(contxb)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor) |
|
238 | 237 | 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 | 238 |
|
240 | 239 | ! 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) |
| 240 | + q_prim_vf(E_idx)%sf(i, j, & |
| 241 | + & 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 | | - 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. |
| 243 | + case (260) ! Gaussian Divergence Pulse |
| 244 | + ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) |
| 245 | + ! => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma) |
| 246 | + ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] |
| 247 | + ! \psi 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) |
|
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 | | - case (261) ! Blob |
| 256 | + case (261) ! Blob |
257 | 257 | r0 = 1._wp/sqrt(8._wp) |
258 | 258 | r2 = x_cc(i)**2 + y_cc(j)**2 |
259 | 259 | r = sqrt(r2) |
|
265 | 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 | | - case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°) |
269 | | - ! rotate by α = atan(2) |
| 268 | + case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°) |
| 269 | + ! rotate by \alpha = atan(2) |
270 | 270 | alpha = atan(2._wp) |
271 | 271 | cosA = cos(alpha) |
272 | 272 | sinA = sin(alpha) |
273 | 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 | | - ! LEFT state: ρ=1, v∥=+10, v⊥=0, p=20, B∥=B⊥=5/√(4π) |
| 277 | + ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi) |
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 |
281 | 281 | 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 |
| 282 | + q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA - (5._wp/sqrt(4._wp*pi))*sinA |
| 283 | + 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 | 284 | else |
287 | | - ! RIGHT state: ρ=1, v∥=−10, v⊥=0, p=1, B∥=B⊥=5/√(4π) |
| 285 | + ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi) |
288 | 286 | q_prim_vf(contxb)%sf(i, j, 0) = 1._wp |
289 | 287 | q_prim_vf(momxb)%sf(i, j, 0) = -10._wp*cosA |
290 | 288 | q_prim_vf(momxb + 1)%sf(i, j, 0) = -10._wp*sinA |
291 | 289 | 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 |
| 290 | + q_prim_vf(B_idx%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosA - (5._wp/sqrt(4._wp*pi))*sinA |
| 291 | + 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 | 292 | end if |
297 | 293 | ! v^z and B^z remain zero by default |
298 | 294 |
|
|
305 | 301 | ! 2D_isentropicvortex case: |
306 | 302 | ! This analytic patch uses geometry 2 |
307 | 303 | 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)) |
| 304 | + q_prim_vf(E_idx)%sf(i, j, & |
| 305 | + & 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) & |
| 306 | + & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0) |
| 307 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 308 | + & 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) & |
| 309 | + & - 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, & |
| 311 | + & 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) & |
| 312 | + & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
| 313 | + q_prim_vf(momxb + 1)%sf(i, j, & |
| 314 | + & 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) & |
| 315 | + & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)) |
312 | 316 | end if |
313 | 317 |
|
314 | 318 | case (281) |
315 | 319 | ! This is patch is hard-coded for test suite optimization used in the |
316 | 320 | ! 2D_acoustic_pulse case: |
317 | 321 | ! This analytic patch uses geometry 2 |
318 | 322 | 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)) |
| 323 | + q_prim_vf(E_idx)%sf(i, j, & |
| 324 | + & 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)) |
| 325 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 326 | + & 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 | 327 | end if |
322 | 328 |
|
323 | 329 | case (282) |
324 | 330 | ! This is patch is hard-coded for test suite optimization used in the |
325 | 331 | ! 2D_zero_circ_vortex case: |
326 | 332 | ! This analytic patch uses geometry 2 |
327 | 333 | 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))) |
| 334 | + q_prim_vf(E_idx)%sf(i, j, & |
| 335 | + & 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)) |
| 336 | + q_prim_vf(contxb + 0)%sf(i, j, & |
| 337 | + & 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)) |
| 338 | + q_prim_vf(momxb + 0)%sf(i, j, & |
| 339 | + & 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 | 340 | 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 | 341 | end if |
333 | 342 |
|
334 | 343 | case default |
335 | 344 | if (proc_rank == 0) then |
336 | 345 | call s_int_to_str(patch_id, iStr) |
337 | | - call s_mpi_abort("Invalid hcid specified for patch "//trim(iStr)) |
| 346 | + call s_mpi_abort("Invalid hcid specified for patch " // trim(iStr)) |
338 | 347 | end if |
339 | 348 |
|
340 | 349 | end select |
|
0 commit comments