@@ -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