Skip to content

Commit 00bd033

Browse files
committed
refactor: consolidate dqL/R_prim directional arrays into dq_prim_dir_t struct
Replace 6 module-level vector_field arrays (dqL/R_prim_dx/dy/dz_n) with 2 dq_prim_dir_t struct instances (dqL_prim_n, dqR_prim_n) whose %x/%y/%z members hold the same data. Subroutine signatures continue to receive individual allocatable arrays to avoid GPU illegal-address errors that arise when a non-allocatable struct is passed as a dummy arg to kernels.
1 parent 10e2c13 commit 00bd033

4 files changed

Lines changed: 85 additions & 93 deletions

File tree

src/common/m_derived_types.fpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ module m_derived_types
7878
type(scalar_field), allocatable, dimension(:) :: vf !< Vector field
7979
end type vector_field
8080

81+
!> Primitive variable gradient triplet: x/y/z spatial derivatives for each sweep direction
82+
type dq_prim_dir_t
83+
type(vector_field), allocatable, dimension(:) :: x, y, z
84+
end type dq_prim_dir_t
85+
8186
!> Generic 3-component vector (e.g., spatial coordinates or field components) Named _dt (derived types: x,y,z) to differentiate
8287
!! from t_vec3 (3-component vector)
8388
type vec3_dt ! dt for derived types

src/simulation/m_rhs.fpp

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,10 @@ module m_rhs
5757
!! primitive variables. The cell-average of the first-order spatial derivatives may be found in the variables dq_prim_ds_qp,
5858
!! where s = x, y or z.
5959
!> @{
60-
type(vector_field), allocatable, dimension(:) :: dqL_prim_dx_n, dqL_prim_dy_n, dqL_prim_dz_n
61-
type(vector_field), allocatable, dimension(:) :: dqR_prim_dx_n, dqR_prim_dy_n, dqR_prim_dz_n
60+
type(dq_prim_dir_t) :: dqL_prim_n, dqR_prim_n
6261
#if defined(MFC_OpenACC)
63-
$:GPU_DECLARE(create='[dqL_prim_dx_n, dqL_prim_dy_n, dqL_prim_dz_n]')
64-
$:GPU_DECLARE(create='[dqR_prim_dx_n, dqR_prim_dy_n, dqR_prim_dz_n]')
62+
$:GPU_DECLARE(create='[dqL_prim_n%x, dqL_prim_n%y, dqL_prim_n%z]')
63+
$:GPU_DECLARE(create='[dqR_prim_n%x, dqR_prim_n%y, dqR_prim_n%z]')
6564
#endif
6665
!> @}
6766

@@ -264,12 +263,12 @@ contains
264263
@:ALLOCATE(qL_prim(1:num_dims))
265264
@:ALLOCATE(qR_prim(1:num_dims))
266265

267-
@:ALLOCATE(dqL_prim_dx_n(1:num_dims))
268-
@:ALLOCATE(dqL_prim_dy_n(1:num_dims))
269-
@:ALLOCATE(dqL_prim_dz_n(1:num_dims))
270-
@:ALLOCATE(dqR_prim_dx_n(1:num_dims))
271-
@:ALLOCATE(dqR_prim_dy_n(1:num_dims))
272-
@:ALLOCATE(dqR_prim_dz_n(1:num_dims))
266+
@:ALLOCATE(dqL_prim_n%x(1:num_dims))
267+
@:ALLOCATE(dqL_prim_n%y(1:num_dims))
268+
@:ALLOCATE(dqL_prim_n%z(1:num_dims))
269+
@:ALLOCATE(dqR_prim_n%x(1:num_dims))
270+
@:ALLOCATE(dqR_prim_n%y(1:num_dims))
271+
@:ALLOCATE(dqR_prim_n%z(1:num_dims))
273272

274273
do i = 1, num_dims
275274
@:ALLOCATE(qL_prim(i)%vf(1:sys_size))
@@ -290,23 +289,23 @@ contains
290289

291290
if (.not. viscous) then
292291
do i = 1, num_dims
293-
@:ALLOCATE(dqL_prim_dx_n(i)%vf(1:sys_size))
294-
@:ALLOCATE(dqL_prim_dy_n(i)%vf(1:sys_size))
295-
@:ALLOCATE(dqL_prim_dz_n(i)%vf(1:sys_size))
296-
@:ALLOCATE(dqR_prim_dx_n(i)%vf(1:sys_size))
297-
@:ALLOCATE(dqR_prim_dy_n(i)%vf(1:sys_size))
298-
@:ALLOCATE(dqR_prim_dz_n(i)%vf(1:sys_size))
292+
@:ALLOCATE(dqL_prim_n%x(i)%vf(1:sys_size))
293+
@:ALLOCATE(dqL_prim_n%y(i)%vf(1:sys_size))
294+
@:ALLOCATE(dqL_prim_n%z(i)%vf(1:sys_size))
295+
@:ALLOCATE(dqR_prim_n%x(i)%vf(1:sys_size))
296+
@:ALLOCATE(dqR_prim_n%y(i)%vf(1:sys_size))
297+
@:ALLOCATE(dqR_prim_n%z(i)%vf(1:sys_size))
299298

300299
do l = eqn_idx%mom%beg, eqn_idx%mom%end
301-
@:ALLOCATE(dqL_prim_dx_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
302-
@:ALLOCATE(dqL_prim_dy_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
303-
@:ALLOCATE(dqL_prim_dz_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
304-
@:ALLOCATE(dqR_prim_dx_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
305-
@:ALLOCATE(dqR_prim_dy_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
306-
@:ALLOCATE(dqR_prim_dz_n(i)%vf(l)%sf(1:1, 1:1, 1:1))
300+
@:ALLOCATE(dqL_prim_n%x(i)%vf(l)%sf(1:1, 1:1, 1:1))
301+
@:ALLOCATE(dqL_prim_n%y(i)%vf(l)%sf(1:1, 1:1, 1:1))
302+
@:ALLOCATE(dqL_prim_n%z(i)%vf(l)%sf(1:1, 1:1, 1:1))
303+
@:ALLOCATE(dqR_prim_n%x(i)%vf(l)%sf(1:1, 1:1, 1:1))
304+
@:ALLOCATE(dqR_prim_n%y(i)%vf(l)%sf(1:1, 1:1, 1:1))
305+
@:ALLOCATE(dqR_prim_n%z(i)%vf(l)%sf(1:1, 1:1, 1:1))
307306
end do
308-
@:ACC_SETUP_VFs(dqL_prim_dx_n(i), dqL_prim_dy_n(i), dqL_prim_dz_n(i))
309-
@:ACC_SETUP_VFs(dqR_prim_dx_n(i), dqR_prim_dy_n(i), dqR_prim_dz_n(i))
307+
@:ACC_SETUP_VFs(dqL_prim_n%x(i), dqL_prim_n%y(i), dqL_prim_n%z(i))
308+
@:ACC_SETUP_VFs(dqR_prim_n%x(i), dqR_prim_n%y(i), dqR_prim_n%z(i))
310309
end do
311310
end if
312311

@@ -350,42 +349,42 @@ contains
350349
end if
351350

352351
do i = 1, num_dims
353-
@:ALLOCATE(dqL_prim_dx_n(i)%vf(1:sys_size))
354-
@:ALLOCATE(dqL_prim_dy_n(i)%vf(1:sys_size))
355-
@:ALLOCATE(dqL_prim_dz_n(i)%vf(1:sys_size))
356-
@:ALLOCATE(dqR_prim_dx_n(i)%vf(1:sys_size))
357-
@:ALLOCATE(dqR_prim_dy_n(i)%vf(1:sys_size))
358-
@:ALLOCATE(dqR_prim_dz_n(i)%vf(1:sys_size))
352+
@:ALLOCATE(dqL_prim_n%x(i)%vf(1:sys_size))
353+
@:ALLOCATE(dqL_prim_n%y(i)%vf(1:sys_size))
354+
@:ALLOCATE(dqL_prim_n%z(i)%vf(1:sys_size))
355+
@:ALLOCATE(dqR_prim_n%x(i)%vf(1:sys_size))
356+
@:ALLOCATE(dqR_prim_n%y(i)%vf(1:sys_size))
357+
@:ALLOCATE(dqR_prim_n%z(i)%vf(1:sys_size))
359358
end do
360359

361360
do i = 1, num_dims
362361
do l = eqn_idx%mom%beg, eqn_idx%mom%end
363-
@:ALLOCATE(dqL_prim_dx_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
362+
@:ALLOCATE(dqL_prim_n%x(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
364363
& idwbuff(3)%beg:idwbuff(3)%end))
365-
@:ALLOCATE(dqR_prim_dx_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
364+
@:ALLOCATE(dqR_prim_n%x(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
366365
& idwbuff(3)%beg:idwbuff(3)%end))
367366
end do
368367

369368
if (n > 0) then
370369
do l = eqn_idx%mom%beg, eqn_idx%mom%end
371-
@:ALLOCATE(dqL_prim_dy_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
370+
@:ALLOCATE(dqL_prim_n%y(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
372371
& idwbuff(3)%beg:idwbuff(3)%end))
373-
@:ALLOCATE(dqR_prim_dy_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
372+
@:ALLOCATE(dqR_prim_n%y(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
374373
& idwbuff(3)%beg:idwbuff(3)%end))
375374
end do
376375
end if
377376

378377
if (p > 0) then
379378
do l = eqn_idx%mom%beg, eqn_idx%mom%end
380-
@:ALLOCATE(dqL_prim_dz_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
379+
@:ALLOCATE(dqL_prim_n%z(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
381380
& idwbuff(3)%beg:idwbuff(3)%end))
382-
@:ALLOCATE(dqR_prim_dz_n(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
381+
@:ALLOCATE(dqR_prim_n%z(i)%vf(l)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, &
383382
& idwbuff(3)%beg:idwbuff(3)%end))
384383
end do
385384
end if
386385

387-
@:ACC_SETUP_VFs(dqL_prim_dx_n(i), dqL_prim_dy_n(i), dqL_prim_dz_n(i))
388-
@:ACC_SETUP_VFs(dqR_prim_dx_n(i), dqR_prim_dy_n(i), dqR_prim_dz_n(i))
386+
@:ACC_SETUP_VFs(dqL_prim_n%x(i), dqL_prim_n%y(i), dqL_prim_n%z(i))
387+
@:ACC_SETUP_VFs(dqR_prim_n%x(i), dqR_prim_n%y(i), dqR_prim_n%z(i))
389388
end do
390389

391390
if (weno_Re_flux) then
@@ -557,8 +556,8 @@ contains
557556
558557
if ((viscous .and. .not. igr)) then
559558
call nvtxStartRange("RHS-VISCOUS")
560-
call s_get_viscous(qL_rsx_vf, dqL_prim_dx_n, dqL_prim_dy_n, dqL_prim_dz_n, qL_prim, qR_rsx_vf, dqR_prim_dx_n, &
561-
& dqR_prim_dy_n, dqR_prim_dz_n, qR_prim, q_prim_qp, dq_prim_dx_qp, dq_prim_dy_qp, dq_prim_dz_qp, &
559+
call s_get_viscous(qL_rsx_vf, dqL_prim_n%x, dqL_prim_n%y, dqL_prim_n%z, qL_prim, qR_rsx_vf, dqR_prim_n%x, &
560+
& dqR_prim_n%y, dqR_prim_n%z, qR_prim, q_prim_qp, dq_prim_dx_qp, dq_prim_dy_qp, dq_prim_dz_qp, &
562561
& idwbuff(1), idwbuff(2), idwbuff(3))
563562
call nvtxEndRange
564563
end if
@@ -687,15 +686,15 @@ contains
687686
if (weno_Re_flux) then
688687
iv%beg = eqn_idx%mom%beg; iv%end = eqn_idx%mom%end
689688
call s_reconstruct_cell_boundary_values_visc_deriv(dq_prim_dx_qp(1)%vf(iv%beg:iv%end), dqL_rsx_vf, &
690-
& dqR_rsx_vf, id, dqL_prim_dx_n(id)%vf(iv%beg:iv%end), dqR_prim_dx_n(id)%vf(iv%beg:iv%end), idwbuff(1), &
689+
& dqR_rsx_vf, id, dqL_prim_n%x(id)%vf(iv%beg:iv%end), dqR_prim_n%x(id)%vf(iv%beg:iv%end), idwbuff(1), &
691690
& idwbuff(2), idwbuff(3))
692691
if (n > 0) then
693692
call s_reconstruct_cell_boundary_values_visc_deriv(dq_prim_dy_qp(1)%vf(iv%beg:iv%end), dqL_rsx_vf, &
694-
& dqR_rsx_vf, id, dqL_prim_dy_n(id)%vf(iv%beg:iv%end), dqR_prim_dy_n(id)%vf(iv%beg:iv%end), &
695-
& idwbuff(1), idwbuff(2), idwbuff(3))
693+
& dqR_rsx_vf, id, dqL_prim_n%y(id)%vf(iv%beg:iv%end), dqR_prim_n%y(id)%vf(iv%beg:iv%end), idwbuff(1), &
694+
& idwbuff(2), idwbuff(3))
696695
if (p > 0) then
697696
call s_reconstruct_cell_boundary_values_visc_deriv(dq_prim_dz_qp(1)%vf(iv%beg:iv%end), dqL_rsx_vf, &
698-
& dqR_rsx_vf, id, dqL_prim_dz_n(id)%vf(iv%beg:iv%end), dqR_prim_dz_n(id)%vf(iv%beg:iv%end), &
697+
& dqR_rsx_vf, id, dqL_prim_n%z(id)%vf(iv%beg:iv%end), dqR_prim_n%z(id)%vf(iv%beg:iv%end), &
699698
& idwbuff(1), idwbuff(2), idwbuff(3))
700699
end if
701700
end if
@@ -715,10 +714,9 @@ contains
715714
716715
! Computing Riemann Solver Flux and Source Flux
717716
call nvtxStartRange("RHS-RIEMANN-SOLVER")
718-
call s_riemann_solver(qR_rsx_vf, dqR_prim_dx_n(id)%vf, dqR_prim_dy_n(id)%vf, dqR_prim_dz_n(id)%vf, &
719-
& qR_prim(id)%vf, qL_rsx_vf, dqL_prim_dx_n(id)%vf, dqL_prim_dy_n(id)%vf, &
720-
& dqL_prim_dz_n(id)%vf, qL_prim(id)%vf, q_prim_qp%vf, flux_n(id)%vf, flux_src_n(id)%vf, &
721-
& flux_gsrc_n(id)%vf, id, irx, iry, irz)
717+
call s_riemann_solver(qR_rsx_vf, dqR_prim_n%x(id)%vf, dqR_prim_n%y(id)%vf, dqR_prim_n%z(id)%vf, qR_prim(id)%vf, &
718+
& qL_rsx_vf, dqL_prim_n%x(id)%vf, dqL_prim_n%y(id)%vf, dqL_prim_n%z(id)%vf, qL_prim(id)%vf, &
719+
& q_prim_qp%vf, flux_n(id)%vf, flux_src_n(id)%vf, flux_gsrc_n(id)%vf, id, irx, iry, irz)
722720
call nvtxEndRange
723721
724722
! Additional physics and source terms RHS addition for advection source
@@ -1762,30 +1760,30 @@ contains
17621760
17631761
do i = num_dims, 1, -1
17641762
do l = eqn_idx%mom%beg, eqn_idx%mom%end
1765-
@:DEALLOCATE(dqL_prim_dx_n(i)%vf(l)%sf)
1766-
@:DEALLOCATE(dqR_prim_dx_n(i)%vf(l)%sf)
1763+
@:DEALLOCATE(dqL_prim_n%x(i)%vf(l)%sf)
1764+
@:DEALLOCATE(dqR_prim_n%x(i)%vf(l)%sf)
17671765
end do
17681766
17691767
if (n > 0) then
17701768
do l = eqn_idx%mom%beg, eqn_idx%mom%end
1771-
@:DEALLOCATE(dqL_prim_dy_n(i)%vf(l)%sf)
1772-
@:DEALLOCATE(dqR_prim_dy_n(i)%vf(l)%sf)
1769+
@:DEALLOCATE(dqL_prim_n%y(i)%vf(l)%sf)
1770+
@:DEALLOCATE(dqR_prim_n%y(i)%vf(l)%sf)
17731771
end do
17741772
end if
17751773
17761774
if (p > 0) then
17771775
do l = eqn_idx%mom%beg, eqn_idx%mom%end
1778-
@:DEALLOCATE(dqL_prim_dz_n(i)%vf(l)%sf)
1779-
@:DEALLOCATE(dqR_prim_dz_n(i)%vf(l)%sf)
1776+
@:DEALLOCATE(dqL_prim_n%z(i)%vf(l)%sf)
1777+
@:DEALLOCATE(dqR_prim_n%z(i)%vf(l)%sf)
17801778
end do
17811779
end if
17821780
1783-
@:DEALLOCATE(dqL_prim_dx_n(i)%vf)
1784-
@:DEALLOCATE(dqL_prim_dy_n(i)%vf)
1785-
@:DEALLOCATE(dqL_prim_dz_n(i)%vf)
1786-
@:DEALLOCATE(dqR_prim_dx_n(i)%vf)
1787-
@:DEALLOCATE(dqR_prim_dy_n(i)%vf)
1788-
@:DEALLOCATE(dqR_prim_dz_n(i)%vf)
1781+
@:DEALLOCATE(dqL_prim_n%x(i)%vf)
1782+
@:DEALLOCATE(dqL_prim_n%y(i)%vf)
1783+
@:DEALLOCATE(dqL_prim_n%z(i)%vf)
1784+
@:DEALLOCATE(dqR_prim_n%x(i)%vf)
1785+
@:DEALLOCATE(dqR_prim_n%y(i)%vf)
1786+
@:DEALLOCATE(dqR_prim_n%z(i)%vf)
17891787
end do
17901788
17911789
if (weno_Re_flux) then
@@ -1798,8 +1796,8 @@ contains
17981796
@:DEALLOCATE(tau_Re_vf(eqn_idx%E)%sf)
17991797
@:DEALLOCATE(tau_Re_vf)
18001798
end if
1801-
@:DEALLOCATE(dqL_prim_dx_n, dqL_prim_dy_n, dqL_prim_dz_n)
1802-
@:DEALLOCATE(dqR_prim_dx_n, dqR_prim_dy_n, dqR_prim_dz_n)
1799+
@:DEALLOCATE(dqL_prim_n%x, dqL_prim_n%y, dqL_prim_n%z)
1800+
@:DEALLOCATE(dqR_prim_n%x, dqR_prim_n%y, dqR_prim_n%z)
18031801
end if
18041802
18051803
if (mpp_lim .and. bubbles_euler) then

0 commit comments

Comments
 (0)