Skip to content

Commit 20eca55

Browse files
author
Anand Radhakrishnan
committed
CBC issue fixed
1 parent 5b429b0 commit 20eca55

File tree

2 files changed

+71
-105
lines changed

2 files changed

+71
-105
lines changed

src/simulation/m_cbc.fpp

Lines changed: 58 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,12 @@ module m_cbc
134134

135135
integer :: bcxb, bcxe, bcyb, bcye, bczb, bcze
136136

137+
integer :: cbc_dir, cbc_loc
138+
137139
!$acc declare create(q_prim_rsx_vf, q_prim_rsy_vf, q_prim_rsz_vf, F_rsx_vf, F_src_rsx_vf,flux_rsx_vf, flux_src_rsx_vf, &
138140
!$acc F_rsy_vf, F_src_rsy_vf,flux_rsy_vf, flux_src_rsy_vf, F_rsz_vf, F_src_rsz_vf,flux_rsz_vf, flux_src_rsz_vf,alpha_rho,vel,adv,mf,Re, &
139141
!$acc dalpha_rho_ds,dvel_ds,dadv_ds,lambda,L,ds,fd_coef_x,fd_coef_y,fd_coef_z, &
140-
!$acc pi_coef_x,pi_coef_y,pi_coef_z, bcxb, bcxe, bcyb, bcye, bczb, bcze, is1, is2, is3, dj)
142+
!$acc pi_coef_x,pi_coef_y,pi_coef_z, bcxb, bcxe, bcyb, bcye, bczb, bcze, is1, is2, is3, dj, cbc_dir, cbc_loc)
141143

142144
contains
143145

@@ -633,7 +635,7 @@ contains
633635
!! @param iy Index bound in the second coordinate direction
634636
!! @param iz Index bound in the third coordinate direction
635637
subroutine s_cbc(q_prim_vf, flux_vf, flux_src_vf, & ! -----------------
636-
cbc_dir, cbc_loc, &
638+
cbc_dir_norm, cbc_loc_norm, &
637639
ix, iy, iz)
638640

639641
type(scalar_field), &
@@ -644,7 +646,7 @@ contains
644646
dimension(sys_size), &
645647
intent(INOUT) :: flux_vf, flux_src_vf
646648

647-
integer, intent(IN) :: cbc_dir, cbc_loc
649+
integer, intent(IN) :: cbc_dir_norm, cbc_loc_norm
648650

649651
type(int_bounds_info), intent(IN) :: ix, iy, iz
650652

@@ -685,6 +687,12 @@ contains
685687

686688
! Allocating L, see Thompson (1987, 1990)
687689

690+
cbc_dir = cbc_dir_norm
691+
cbc_loc = cbc_loc_norm
692+
693+
!$acc update device(cbc_dir, cbc_loc)
694+
695+
688696
call s_initialize_cbc(q_prim_vf, flux_vf, flux_src_vf, &
689697
cbc_dir, cbc_loc, &
690698
ix, iy, iz)
@@ -729,7 +737,6 @@ contains
729737

730738
! PI4 of flux_rs_vf and flux_src_rs_vf at j = 1/2, 3/2 =============
731739
elseif (weno_order == 5) then
732-
733740
call s_convert_primitive_to_flux_variables(q_prim_rs${XYZ}$_vf, &
734741
F_rs${XYZ}$_vf, &
735742
F_src_rs${XYZ}$_vf, &
@@ -905,19 +912,19 @@ contains
905912

906913
! call s_compute_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
907914

908-
if ((cbc_loc == -1 .and. bcxb == -5) .or. (cbc_loc == 1 .and. bcxe == -5)) then
915+
if ((cbc_loc == -1 .and. bc${XYZ}$b == -5) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -5)) then
909916
call s_compute_slip_wall_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
910-
else if ((cbc_loc == -1 .and. bcxb == -6) .or. (cbc_loc == 1 .and. bcxe == -6)) then
911-
call s_compute_nonreflecting_subsonic_buffer_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
912-
else if ((cbc_loc == -1 .and. bcxb == -7) .or. (cbc_loc == 1 .and. bcxe == -7)) then
913-
call s_compute_nonreflecting_subsonic_inflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
914-
else if ((cbc_loc == -1 .and. bcxb == -8) .or. (cbc_loc == 1 .and. bcxe == -8)) then
915-
call s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
916-
else if ((cbc_loc == -1 .and. bcxb == -9) .or. (cbc_loc == 1 .and. bcxe == -9)) then
917-
call s_compute_force_free_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
918-
else if ((cbc_loc == -1 .and. bcxb == -10) .or. (cbc_loc == 1 .and. bcxe == -10)) then
919-
call s_compute_constant_pressure_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
920-
else if ((cbc_loc == -1 .and. bcxb == -11) .or. (cbc_loc == 1 .and. bcxe == -11)) then
917+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -6) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -6)) then
918+
call s_compute_nonreflecting_subsonic_buffer_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
919+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -7) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -7)) then
920+
call s_compute_nonreflecting_subsonic_inflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
921+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -8) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -8)) then
922+
call s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
923+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -9) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -9)) then
924+
call s_compute_force_free_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
925+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -10) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -10)) then
926+
call s_compute_constant_pressure_subsonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
927+
else if ((cbc_loc == -1 .and. bc${XYZ}$b == -11) .or. (cbc_loc == 1 .and. bc${XYZ}$e == -11)) then
921928
call s_compute_supersonic_inflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
922929
else
923930
call s_compute_supersonic_outflow_L(dflt_int, lambda, L, rho, c, mf, dalpha_rho_ds, dpres_ds, dvel_ds, dadv_ds) ! --------------
@@ -942,7 +949,7 @@ call s_compute_constant_pressure_subsonic_outflow_L(dflt_int, lambda, L, rho, c,
942949
dvel_dt(dir_idx(i)) = dir_flg(dir_idx(i))* &
943950
(L(1) - L(advxe))/(2d0*rho*c) + &
944951
(dir_flg(dir_idx(i)) - 1d0)* &
945-
L(momxb + i)
952+
L(momxb + i - 1)
946953
end do
947954

948955
vel_dv_dt_sum = 0d0
@@ -984,18 +991,18 @@ call s_compute_constant_pressure_subsonic_outflow_L(dflt_int, lambda, L, rho, c,
984991
!$acc loop seq
985992
do i = 1, contxe
986993
flux_rs${XYZ}$_vf(-1, k, r, i) = flux_rs${XYZ}$_vf(0, k, r, i) &
987-
+ ds(0)*dalpha_rho_dt(i)
994+
+ ds(0)*sign(1d0, -real(cbc_loc, kind(0d0)))*dalpha_rho_dt(i)
988995
end do
989996

990997
!$acc loop seq
991998
do i = momxb, momxe
992999
flux_rs${XYZ}$_vf(-1, k, r, i) = flux_rs${XYZ}$_vf(0, k, r, i) &
993-
+ ds(0)*(vel(i - contxe)*drho_dt &
1000+
+ ds(0)*sign(1d0, -real(cbc_loc, kind(0d0)))*(vel(i - contxe)*drho_dt &
9941001
+ rho*dvel_dt(i - contxe))
9951002
end do
9961003

9971004
flux_rs${XYZ}$_vf(-1, k, r, E_idx) = flux_rs${XYZ}$_vf(0, k, r, E_idx) &
998-
+ ds(0)*(pres*dgamma_dt &
1005+
+ ds(0)*sign(1d0, -real(cbc_loc, kind(0d0)))*(pres*dgamma_dt &
9991006
+ gamma*dpres_dt &
10001007
+ dpi_inf_dt &
10011008
+ rho*vel_dv_dt_sum &
@@ -1015,21 +1022,20 @@ call s_compute_constant_pressure_subsonic_outflow_L(dflt_int, lambda, L, rho, c,
10151022
*(flux_rs${XYZ}$_vf(0, k, r, i) &
10161023
+ vel(dir_idx(1)) &
10171024
*flux_src_rs${XYZ}$_vf(0, k, r, i) &
1018-
+ ds(0)*dadv_dt(i - E_idx))
1025+
+ ds(0)*sign(1d0, -real(cbc_loc, kind(0d0)))*dadv_dt(i - E_idx))
10191026
end do
10201027

10211028
else
10221029

10231030
!$acc loop seq
10241031
do i = advxb, advxe
1025-
flux_rs${XYZ}$_vf(-1, k, r, i) = flux_rs${XYZ}$_vf(0, k, r, i) - &
1026-
adv(i - E_idx)*flux_src_rs${XYZ}$_vf(0, k, r, i) + &
1027-
ds(0)*dadv_dt(i - E_idx)
1032+
flux_rs${XYZ}$_vf(-1, k, r, i) = flux_rs${XYZ}$_vf(0, k, r, i) + &
1033+
sign(1d0, -real(cbc_loc, kind(0d0)))*ds(0)*dadv_dt(i - E_idx)
10281034
end do
10291035

10301036
!$acc loop seq
10311037
do i = advxb, advxe
1032-
flux_src_rs${XYZ}$_vf(-1, k, r, i) = 0d0
1038+
flux_src_rs${XYZ}$_vf(-1, k, r, i) = flux_src_rs${XYZ}$_vf(0, k, r, i)
10331039
end do
10341040

10351041
end if
@@ -1157,7 +1163,7 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
11571163

11581164
integer :: i !> Generic loop iterator
11591165

1160-
L(1) = lambda(1)*(dpres_ds - rho*c*dvel_ds(dir_idx(1)))
1166+
L(1) = lambda(1)*(dpres_ds - rho*c*dvel_ds(dir_idx(1)))
11611167

11621168
do i = 2, momxb
11631169
L(i) = lambda(2)*(c*c*dalpha_rho_ds(i - 1) - mf(i - 1)*dpres_ds)
@@ -1403,19 +1409,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
14031409
end do
14041410
end do
14051411

1406-
!$acc parallel loop collapse(3) gang vector default(present)
1407-
do r = is3%beg, is3%end
1408-
do k = is2%beg, is2%end
1409-
do j = -1, buff_size
1410-
flux_src_rsx_vf(j, k, r, advxb) = &
1411-
flux_src_vf(advxb)%sf(dj*((m - 1) - 2*j) + j, k, r)
1412-
end do
1413-
end do
1414-
end do
1415-
1416-
if (riemann_solver == 1) then
1412+
if(riemann_solver == 1) then
14171413
!$acc parallel loop collapse(4) gang vector default(present)
1418-
do i = advxb + 1, advxe
1414+
do i = 1, advxe
14191415
do r = is3%beg, is3%end
14201416
do k = is2%beg, is2%end
14211417
do j = -1, buff_size
@@ -1437,6 +1433,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
14371433
end do
14381434
end do
14391435
end if
1436+
1437+
1438+
14401439
! END: Reshaping Inputted Data in x-direction ======================
14411440

14421441
! Reshaping Inputted Data in y-direction ===========================
@@ -1488,19 +1487,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
14881487
end do
14891488
end do
14901489

1491-
!$acc parallel loop collapse(3) gang vector default(present)
1492-
do r = is3%beg, is3%end
1493-
do k = is2%beg, is2%end
1494-
do j = -1, buff_size
1495-
flux_src_rsy_vf(j, k, r, advxb) = &
1496-
flux_src_vf(advxb)%sf(k, dj*((n - 1) - 2*j) + j, r)
1497-
end do
1498-
end do
1499-
end do
1500-
1501-
if (riemann_solver == 1) then
1490+
if(riemann_solver == 1) then
15021491
!$acc parallel loop collapse(4) gang vector default(present)
1503-
do i = advxb + 1, advxe
1492+
do i = 1, advxe
15041493
do r = is3%beg, is3%end
15051494
do k = is2%beg, is2%end
15061495
do j = -1, buff_size
@@ -1521,7 +1510,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
15211510
end do
15221511
end do
15231512
end do
1524-
end if
1513+
end if
1514+
1515+
15251516
! END: Reshaping Inputted Data in y-direction ======================
15261517

15271518
! Reshaping Inputted Data in z-direction ===========================
@@ -1573,19 +1564,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
15731564
end do
15741565
end do
15751566

1576-
!$acc parallel loop collapse(3) gang vector default(present)
1577-
do r = is3%beg, is3%end
1578-
do k = is2%beg, is2%end
1579-
do j = -1, buff_size
1580-
flux_src_rsz_vf(j, k, r, advxb) = &
1581-
flux_src_vf(advxb)%sf(r, k, dj*((p - 1) - 2*j) + j)
1582-
end do
1583-
end do
1584-
end do
1585-
1586-
if (riemann_solver == 1) then
1567+
if(riemann_solver == 1) then
15871568
!$acc parallel loop collapse(4) gang vector default(present)
1588-
do i = advxb + 1, advxe
1569+
do i = 1, advxe
15891570
do r = is3%beg, is3%end
15901571
do k = is2%beg, is2%end
15911572
do j = -1, buff_size
@@ -1605,9 +1586,10 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
16051586
sign(1d0, -real(cbc_loc, kind(0d0)))
16061587
end do
16071588
end do
1608-
end do
1589+
end do
16091590
end if
16101591

1592+
16111593
end if
16121594
! END: Reshaping Inputted Data in z-direction ======================
16131595

@@ -1671,19 +1653,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
16711653
end do
16721654
end do
16731655

1674-
!$acc parallel loop collapse(3) gang vector default(present)
1675-
do r = is3%beg, is3%end
1676-
do k = is2%beg, is2%end
1677-
do j = -1, buff_size
1678-
flux_src_vf(advxb)%sf(dj*((m - 1) - 2*j) + j, k, r) = &
1679-
flux_src_rsx_vf(j, k, r, advxb)
1680-
end do
1681-
end do
1682-
end do
1683-
1684-
if (riemann_solver == 1) then
1656+
if(riemann_solver == 1) then
16851657
!$acc parallel loop collapse(4) gang vector default(present)
1686-
do i = advxb + 1, advxe
1658+
do i = 1, advxe
16871659
do r = is3%beg, is3%end
16881660
do k = is2%beg, is2%end
16891661
do j = -1, buff_size
@@ -1700,7 +1672,7 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
17001672
do j = -1, buff_size
17011673
flux_src_vf(advxb)%sf(dj*((m - 1) - 2*j) + j, k, r) = &
17021674
flux_src_rsx_vf(j, k, r, advxb)* &
1703-
sign(1d0, -real(cbc_loc, kind(0d0)))
1675+
sign(1d0, -real(cbc_loc, kind(0d0)))
17041676
end do
17051677
end do
17061678
end do
@@ -1733,19 +1705,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
17331705
end do
17341706
end do
17351707

1736-
!$acc parallel loop collapse(3) gang vector default(present)
1737-
do r = is3%beg, is3%end
1738-
do k = is2%beg, is2%end
1739-
do j = -1, buff_size
1740-
flux_src_vf(advxb)%sf(k, dj*((n - 1) - 2*j) + j, r) = &
1741-
flux_src_rsy_vf(j, k, r, advxb)
1742-
end do
1743-
end do
1744-
end do
1745-
1746-
if (riemann_solver == 1) then
1708+
if(riemann_solver == 1) then
17471709
!$acc parallel loop collapse(4) gang vector default(present)
1748-
do i = advxb + 1, advxe
1710+
do i = 1, advxe
17491711
do r = is3%beg, is3%end
17501712
do k = is2%beg, is2%end
17511713
do j = -1, buff_size
@@ -1762,11 +1724,12 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
17621724
do j = -1, buff_size
17631725
flux_src_vf(advxb)%sf(k, dj*((n - 1) - 2*j) + j, r) = &
17641726
flux_src_rsy_vf(j, k, r, advxb)* &
1765-
sign(1d0, -real(cbc_loc, kind(0d0)))
1727+
sign(1d0, -real(cbc_loc, kind(0d0)))
17661728
end do
17671729
end do
1768-
end do
1730+
end do
17691731
end if
1732+
17701733
! END: Reshaping Outputted Data in y-direction =====================
17711734

17721735
! Reshaping Outputted Data in z-direction ==========================
@@ -1795,19 +1758,9 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
17951758
end do
17961759
end do
17971760

1798-
!$acc parallel loop collapse(3) gang vector default(present)
1799-
do r = is3%beg, is3%end
1800-
do k = is2%beg, is2%end
1801-
do j = -1, buff_size
1802-
flux_src_vf(advxb)%sf(r, k, dj*((p - 1) - 2*j) + j) = &
1803-
flux_src_rsz_vf(j, k, r, advxb)
1804-
end do
1805-
end do
1806-
end do
1807-
1808-
if (riemann_solver == 1) then
1761+
if(riemann_solver == 1) then
18091762
!$acc parallel loop collapse(4) gang vector default(present)
1810-
do i = advxb + 1, advxe
1763+
do i = 1, advxe
18111764
do r = is3%beg, is3%end
18121765
do k = is2%beg, is2%end
18131766
do j = -1, buff_size
@@ -1824,12 +1777,13 @@ subroutine s_compute_nonreflecting_subsonic_outflow_L(dflt_int, lambda, L, rho,
18241777
do j = -1, buff_size
18251778
flux_src_vf(advxb)%sf(r, k, dj*((p - 1) - 2*j) + j) = &
18261779
flux_src_rsz_vf(j, k, r, advxb)* &
1827-
sign(1d0, -real(cbc_loc, kind(0d0)))
1780+
sign(1d0, -real(cbc_loc, kind(0d0)))
18281781
end do
18291782
end do
18301783
end do
18311784
end if
18321785

1786+
18331787
end if
18341788
! END: Reshaping Outputted Data in z-direction =====================
18351789

src/simulation/p_main.fpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ program p_main
5252

5353
use m_bubbles
5454

55+
use ieee_arithmetic
56+
5557
#ifdef _OPENACC
5658
use openacc
5759
#endif
@@ -64,7 +66,7 @@ program p_main
6466

6567
integer :: err_code, ierr
6668

67-
integer :: t_step, i !< Iterator for the time-stepping loop
69+
integer :: t_step, i, j, k, l !< Iterator for the time-stepping loop
6870
real(kind(0d0)) :: time_avg, time_final
6971
real(kind(0d0)) :: io_time_avg, io_time_final
7072
real(kind(0d0)), allocatable, dimension(:) :: proc_time
@@ -324,6 +326,16 @@ program p_main
324326
! call nvtxStartRange("I/O")
325327
do i = 1, sys_size
326328
!$acc update host(q_cons_ts(1)%vf(i)%sf)
329+
do l = 0, p
330+
do k = 0, n
331+
do j = 0, m
332+
if(ieee_is_nan(q_cons_ts(1)%vf(i)%sf(j, k, l))) then
333+
print *, j, k, l, proc_rank, t_step, m, n, p
334+
STOP "Error"
335+
end if
336+
end do
337+
end do
338+
end do
327339
end do
328340
call s_write_data_files(q_cons_ts(1)%vf, t_step)
329341
! call nvtxEndRange

0 commit comments

Comments
 (0)