Skip to content

Commit 1a557f5

Browse files
authored
Merge branch 'master' into feat/convergence-ci
2 parents ad21cd7 + 42f003e commit 1a557f5

30 files changed

Lines changed: 897 additions & 1031 deletions

File tree

.github/workflows/common/build.sh

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,9 @@ fi
2525
# source code is built here on the compute node.
2626
# Phoenix: always start fresh to avoid SIGILL from stale binaries compiled
2727
# on a different microarchitecture.
28-
# Frontier: wipe only compiled Fortran staging/install slugs; preserve dep
29-
# dirs (silo, hdf5, lapack, fftw, hipfort) which were built on the login node
30-
# and cannot be re-fetched from a compute node (no internet).
3128
if [ "$job_cluster" = "phoenix" ]; then
3229
source .github/scripts/clean-build.sh
3330
clean_build
34-
elif [ "$job_cluster" = "frontier" ] || [ "$job_cluster" = "frontier_amd" ]; then
35-
for _dir in build/staging/ build/install/; do
36-
if [ -d "$_dir" ]; then
37-
for _sub in "$_dir"*/; do
38-
_name=$(basename "$_sub")
39-
case "$_name" in silo|hdf5|lapack|fftw|hipfort) continue ;; esac
40-
rm -rf "$_sub"
41-
done
42-
fi
43-
done
44-
unset _dir _sub _name
4531
fi
4632

4733
source .github/scripts/retry-build.sh

benchmarks/igr/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"num_patches": 1,
7070
"model_eqns": 2,
7171
"num_fluids": 1,
72+
"riemann_solver": 5,
7273
"time_stepper": 3,
7374
"bc_x%beg": -1,
7475
"bc_x%end": -1,

examples/2D_IGR_2fluid/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"mixture_err": "T",
4646
"mpp_lim": "F",
4747
"time_stepper": 3,
48+
"riemann_solver": 5,
4849
"bc_x%beg": -1,
4950
"bc_x%end": -1,
5051
"bc_y%beg": -1,

examples/2D_IGR_triple_point/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"alt_soundspeed": "F",
3131
"num_fluids": 2,
3232
"time_stepper": 3,
33+
"riemann_solver": 5,
3334
"elliptic_smoothing": "T",
3435
"elliptic_smoothing_iters": 50,
3536
"igr": "T",

examples/3D_IGR_33jet/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"num_fluids": 1,
5353
"mpp_lim": "F",
5454
"time_stepper": 3,
55+
"riemann_solver": 5,
5556
"igr": "T",
5657
"igr_order": 3,
5758
"igr_pres_lim": "T",

examples/3D_IGR_TaylorGreenVortex/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"model_eqns": 2,
5050
"num_fluids": 1,
5151
"time_stepper": 3,
52+
"riemann_solver": 5,
5253
"bc_x%beg": -1,
5354
"bc_x%end": -1,
5455
"bc_y%beg": -1,

examples/3D_IGR_TaylorGreenVortex_nvidia/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"model_eqns": 2,
5555
"num_fluids": 1,
5656
"time_stepper": 3,
57+
"riemann_solver": 5,
5758
"bc_x%beg": -1,
5859
"bc_x%end": -1,
5960
"bc_y%beg": -1,

examples/3D_IGR_jet/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"num_fluids": 2,
7979
"mpp_lim": "T",
8080
"time_stepper": 3,
81+
"riemann_solver": 5,
8182
"igr": "T",
8283
"igr_order": 3,
8384
"igr_pres_lim": "T",

examples/3D_IGR_jet_1fluid/case.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"num_fluids": 1,
5454
"mpp_lim": "F",
5555
"time_stepper": 3,
56+
"riemann_solver": 5,
5657
"igr": "T",
5758
"igr_order": 5,
5859
"igr_pres_lim": "T",

src/simulation/m_weno.fpp

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ module m_weno
7373
integer :: v_size !< Number of WENO-reconstructed cell-average variables
7474
$:GPU_DECLARE(create='[v_size]')
7575

76+
logical :: uniform_grid(3) !< True if grid spacing is uniform in each direction
77+
$:GPU_DECLARE(create='[uniform_grid]')
78+
7679
!> @name Indical bounds in the s1-, s2- and s3-directions
7780
!> @{
7881
type(int_bounds_info) :: is1_weno, is2_weno, is3_weno
@@ -183,6 +186,7 @@ contains
183186
integer :: i !< Generic loop iterator
184187
real(wp) :: w(1:8) !< Intermediate var for ideal weights: s_cb across overall stencil
185188
real(wp) :: y(1:4) !< Intermediate var for poly & beta: diff(s_cb) across sub-stencil
189+
real(wp) :: h0 !< Reference spacing for uniform-grid detection
186190

187191
! Determine cell count, boundary locations, and BCs for selected WENO direction
188192

@@ -843,12 +847,24 @@ contains
843847
end if
844848
#:endfor
845849

850+
! Detect whether grid spacing is uniform (enables cancellation-free sum-of-squares beta). Tolerance uses sqrt(epsilon) so it
851+
! works in both double and single precision: ~1.5e-8 relative in double, ~3.5e-4 in single - above FP noise, below real
852+
! stretching.
853+
uniform_grid(weno_dir) = .true.
854+
h0 = (s_cb(s) - s_cb(0))/real(s, wp)
855+
do i = 0, s - 1
856+
if (abs((s_cb(i + 1) - s_cb(i)) - h0) > sqrt(epsilon(h0))*abs(h0)) then
857+
uniform_grid(weno_dir) = .false.
858+
exit
859+
end if
860+
end do
861+
846862
if (weno_dir == 1) then
847-
$:GPU_UPDATE(device='[poly_coef_cbL_x, poly_coef_cbR_x, d_cbL_x, d_cbR_x, beta_coef_x]')
863+
$:GPU_UPDATE(device='[poly_coef_cbL_x, poly_coef_cbR_x, d_cbL_x, d_cbR_x, beta_coef_x, uniform_grid]')
848864
else if (weno_dir == 2) then
849-
$:GPU_UPDATE(device='[poly_coef_cbL_y, poly_coef_cbR_y, d_cbL_y, d_cbR_y, beta_coef_y]')
865+
$:GPU_UPDATE(device='[poly_coef_cbL_y, poly_coef_cbR_y, d_cbL_y, d_cbR_y, beta_coef_y, uniform_grid]')
850866
else
851-
$:GPU_UPDATE(device='[poly_coef_cbL_z, poly_coef_cbR_z, d_cbL_z, d_cbR_z, beta_coef_z]')
867+
$:GPU_UPDATE(device='[poly_coef_cbL_z, poly_coef_cbR_z, d_cbL_z, d_cbR_z, beta_coef_z, uniform_grid]')
852868
end if
853869

854870
! Nullifying WENO coefficients and cell-boundary locations pointers
@@ -1053,12 +1069,22 @@ contains
10531069
poly(2) = v_rs_ws_${XYZ}$ (j, k, l, i) + poly_coef_cbL_${XYZ}$ (j, 2, &
10541070
& 0)*dvd(-1) + poly_coef_cbL_${XYZ}$ (j, 2, 1)*dvd(-2)
10551071

1056-
beta(0) = beta_coef_${XYZ}$ (j, 0, 0)*dvd(1)*dvd(1) + beta_coef_${XYZ}$ (j, 0, &
1057-
& 1)*dvd(1)*dvd(0) + beta_coef_${XYZ}$ (j, 0, 2)*dvd(0)*dvd(0) + weno_eps
1058-
beta(1) = beta_coef_${XYZ}$ (j, 1, 0)*dvd(0)*dvd(0) + beta_coef_${XYZ}$ (j, 1, &
1059-
& 1)*dvd(0)*dvd(-1) + beta_coef_${XYZ}$ (j, 1, 2)*dvd(-1)*dvd(-1) + weno_eps
1060-
beta(2) = beta_coef_${XYZ}$ (j, 2, 0)*dvd(-1)*dvd(-1) + beta_coef_${XYZ}$ (j, 2, &
1061-
& 1)*dvd(-1)*dvd(-2) + beta_coef_${XYZ}$ (j, 2, 2)*dvd(-2)*dvd(-2) + weno_eps
1072+
! Jiang & Shu (1996) sum-of-squares form on uniform grids: all terms non-negative, no
1073+
! cancellation. On non-uniform grids, fall back to precomputed coefficients.
1074+
if (uniform_grid(${WENO_DIR}$)) then
1075+
beta(0) = 13._wp/12._wp*(dvd(1) - dvd(0))**2 + 0.25_wp*(dvd(1) - 3._wp*dvd(0))**2 &
1076+
& + weno_eps
1077+
beta(1) = 13._wp/12._wp*(dvd(0) - dvd(-1))**2 + 0.25_wp*(dvd(0) + dvd(-1))**2 + weno_eps
1078+
beta(2) = 13._wp/12._wp*(dvd(-1) - dvd(-2))**2 + 0.25_wp*(3._wp*dvd(-1) - dvd(-2))**2 &
1079+
& + weno_eps
1080+
else
1081+
beta(0) = beta_coef_${XYZ}$ (j, 0, 0)*dvd(1)*dvd(1) + beta_coef_${XYZ}$ (j, 0, &
1082+
& 1)*dvd(1)*dvd(0) + beta_coef_${XYZ}$ (j, 0, 2)*dvd(0)*dvd(0) + weno_eps
1083+
beta(1) = beta_coef_${XYZ}$ (j, 1, 0)*dvd(0)*dvd(0) + beta_coef_${XYZ}$ (j, 1, &
1084+
& 1)*dvd(0)*dvd(-1) + beta_coef_${XYZ}$ (j, 1, 2)*dvd(-1)*dvd(-1) + weno_eps
1085+
beta(2) = beta_coef_${XYZ}$ (j, 2, 0)*dvd(-1)*dvd(-1) + beta_coef_${XYZ}$ (j, 2, &
1086+
& 1)*dvd(-1)*dvd(-2) + beta_coef_${XYZ}$ (j, 2, 2)*dvd(-2)*dvd(-2) + weno_eps
1087+
end if
10621088

10631089
if (wenojs) then
10641090
do q = 0, weno_num_stencils

0 commit comments

Comments
 (0)