Skip to content

Commit 8e894a5

Browse files
committed
improve: simplify m_muscl with merge, Fypp template for order-1, direct THINC call
1 parent 9d24e01 commit 8e894a5

1 file changed

Lines changed: 20 additions & 78 deletions

File tree

src/simulation/m_muscl.fpp

Lines changed: 20 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -42,48 +42,15 @@ contains
4242
!> Allocate and initialize MUSCL reconstruction working arrays
4343
subroutine s_initialize_muscl_module()
4444

45-
! Initializing in x-direction
46-
is_muscl%x%beg = -buff_size; is_muscl%x%end = m - is_muscl%x%beg
47-
if (n == 0) then
48-
is_muscl%y%beg = 0
49-
else
50-
is_muscl%y%beg = -buff_size
51-
end if
52-
45+
is_muscl%x%beg = -buff_size; is_muscl%x%end = m + buff_size
46+
is_muscl%y%beg = merge(0, -buff_size, n == 0)
5347
is_muscl%y%end = n - is_muscl%y%beg
54-
55-
if (p == 0) then
56-
is_muscl%z%beg = 0
57-
else
58-
is_muscl%z%beg = -buff_size
59-
end if
60-
48+
is_muscl%z%beg = merge(0, -buff_size, p == 0)
6149
is_muscl%z%end = p - is_muscl%z%beg
6250

6351
@:ALLOCATE(v_rs_ws_muscl(is_muscl%x%beg:is_muscl%x%end, is_muscl%y%beg:is_muscl%y%end, is_muscl%z%beg:is_muscl%z%end, &
6452
& 1:sys_size))
6553

66-
if (n == 0) return
67-
68-
! initializing in y-direction
69-
is_muscl%y%beg = -buff_size; is_muscl%y%end = n - is_muscl%y%beg
70-
is_muscl%x%beg = -buff_size; is_muscl%x%end = m - is_muscl%x%beg
71-
72-
if (p == 0) then
73-
is_muscl%z%beg = 0
74-
else
75-
is_muscl%z%beg = -buff_size
76-
end if
77-
78-
is_muscl%z%end = p - is_muscl%z%beg
79-
80-
if (p == 0) return
81-
82-
! initializing in z-direction
83-
is_muscl%y%beg = -buff_size; is_muscl%y%end = n - is_muscl%y%beg
84-
is_muscl%x%beg = -buff_size; is_muscl%x%end = m - is_muscl%x%beg
85-
is_muscl%z%beg = -buff_size; is_muscl%z%end = p - is_muscl%z%beg
86-
8754
end subroutine s_initialize_muscl_module
8855

8956
!> Perform MUSCL reconstruction of left and right cell-boundary values from cell-averaged variables
@@ -105,46 +72,25 @@ contains
10572
$:GPU_UPDATE(device='[is_muscl]')
10673

10774
if (muscl_order == 1) then
108-
if (muscl_dir == 1) then
109-
$:GPU_PARALLEL_LOOP(collapse=4)
110-
do i = 1, ubound(v_vf, 1)
111-
do l = is_muscl%z%beg, is_muscl%z%end
112-
do k = is_muscl%y%beg, is_muscl%y%end
113-
do j = is_muscl%x%beg, is_muscl%x%end
114-
vL_rs_vf_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
115-
vR_rs_vf_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
116-
end do
117-
end do
118-
end do
119-
end do
120-
$:END_GPU_PARALLEL_LOOP()
121-
else if (muscl_dir == 2) then
122-
$:GPU_PARALLEL_LOOP(collapse=4)
123-
do i = 1, ubound(v_vf, 1)
124-
do l = is_muscl%z%beg, is_muscl%z%end
125-
do j = is_muscl%x%beg, is_muscl%x%end
126-
do k = is_muscl%y%beg, is_muscl%y%end
127-
vL_rs_vf_x(k, j, l, i) = v_vf(i)%sf(k, j, l)
128-
vR_rs_vf_x(k, j, l, i) = v_vf(i)%sf(k, j, l)
129-
end do
130-
end do
131-
end do
132-
end do
133-
$:END_GPU_PARALLEL_LOOP()
134-
else if (muscl_dir == 3) then
135-
$:GPU_PARALLEL_LOOP(collapse=4)
136-
do i = 1, ubound(v_vf, 1)
137-
do j = is_muscl%x%beg, is_muscl%x%end
138-
do k = is_muscl%y%beg, is_muscl%y%end
139-
do l = is_muscl%z%beg, is_muscl%z%end
140-
vL_rs_vf_x(l, k, j, i) = v_vf(i)%sf(l, k, j)
141-
vR_rs_vf_x(l, k, j, i) = v_vf(i)%sf(l, k, j)
75+
#:for MUSCL_DIR, IV, MV, OV, IB, MB, OB, IDX in &
76+
[(1, 'j', 'k', 'l', 'is_muscl%x', 'is_muscl%y', 'is_muscl%z', 'j, k, l'), &
77+
(2, 'k', 'j', 'l', 'is_muscl%y', 'is_muscl%x', 'is_muscl%z', 'k, j, l'), &
78+
(3, 'l', 'k', 'j', 'is_muscl%z', 'is_muscl%y', 'is_muscl%x', 'l, k, j')]
79+
if (muscl_dir == ${MUSCL_DIR}$) then
80+
$:GPU_PARALLEL_LOOP(collapse=4)
81+
do i = 1, ubound(v_vf, 1)
82+
do ${OV}$ = ${OB}$%beg, ${OB}$%end
83+
do ${MV}$ = ${MB}$%beg, ${MB}$%end
84+
do ${IV}$ = ${IB}$%beg, ${IB}$%end
85+
vL_rs_vf_x(${IDX}$, i) = v_vf(i)%sf(${IDX}$)
86+
vR_rs_vf_x(${IDX}$, i) = v_vf(i)%sf(${IDX}$)
87+
end do
14288
end do
14389
end do
14490
end do
145-
end do
146-
$:END_GPU_PARALLEL_LOOP()
147-
end if
91+
$:END_GPU_PARALLEL_LOOP()
92+
end if
93+
#:endfor
14894
end if
14995

15096
v_size = ubound(v_vf, 1)
@@ -226,11 +172,7 @@ contains
226172

227173
if (int_comp > 0 .and. v_size >= eqn_idx%adv%end) then
228174
call nvtxStartRange("WENO-INTCOMP")
229-
#:for MUSCL_DIR, XYZ in [(1, 'x'), (2, 'y'), (3, 'z')]
230-
if (muscl_dir == ${MUSCL_DIR}$) then
231-
call s_thinc_compression(v_rs_ws_muscl, vL_rs_vf_x, vR_rs_vf_x, muscl_dir, is_muscl%x, is_muscl%y, is_muscl%z)
232-
end if
233-
#:endfor
175+
call s_thinc_compression(v_rs_ws_muscl, vL_rs_vf_x, vR_rs_vf_x, muscl_dir, is_muscl%x, is_muscl%y, is_muscl%z)
234176
call nvtxEndRange()
235177
end if
236178

0 commit comments

Comments
 (0)