@@ -539,6 +539,17 @@ program main
539539 enddo
540540 enddo
541541 ! $acc end parallel loop
542+ ! apply BC on phi_tmp (no-flux)
543+ ! $acc parallel loop collapse(3)
544+ do k= 1 , piX% shape (3 )
545+ do j= 1 , piX% shape (2 )
546+ do i= 1 ,nx
547+ kg = piX% lo(3 ) + k - 1 - halo_ext
548+ if (kg .eq. 1 ) phi_tmp(i,j,k-1 ) = phi_tmp(i,j,k)
549+ if (kg .eq. nz) phi_tmp(i,j,k+1 ) = phi_tmp(i,j,k)
550+ enddo
551+ enddo
552+ enddo
542553 ! 4.3 Call halo exchanges along Y and Z for phi
543554 ! $acc host_data use_device(phi_tmp)
544555 CHECK_CUDECOMP_EXIT(cudecompUpdateHalosX(handle, grid_desc, phi_tmp, work_halo_d, CUDECOMP_DOUBLE, piX% halo_extents, halo_periods, 2 ))
@@ -657,16 +668,28 @@ program main
657668 do k= 1 , piX% shape (3 )
658669 do j= 1 , piX% shape (2 )
659670 do i= 1 ,nx
660- phi_tmp(i,j,k) = phi(i,j,k) + 0.5d0 * dt * rhsphik2(i,j,k)
671+ phi_tmp(i,j,k) = phi(i,j,k) + 0.5d0 * dt * rhsphik2(i,j,k)
661672 enddo
662673 enddo
663674 enddo
664675 ! $acc end parallel loop
676+ ! apply BC on phi_tmp (no-flux)
677+ ! $acc parallel loop collapse(3)
678+ do k= 1 , piX% shape (3 )
679+ do j= 1 , piX% shape (2 )
680+ do i= 1 ,nx
681+ kg = piX% lo(3 ) + k - 1 - halo_ext
682+ if (kg .eq. 1 ) phi_tmp(i,j,k-1 ) = phi_tmp(i,j,k)
683+ if (kg .eq. nz) phi_tmp(i,j,k+1 ) = phi_tmp(i,j,k)
684+ enddo
685+ enddo
686+ enddo
665687 ! 4.3 Call halo exchanges along Y and Z for phi
666688 ! $acc host_data use_device(phi_tmp)
667689 CHECK_CUDECOMP_EXIT(cudecompUpdateHalosX(handle, grid_desc, phi_tmp, work_halo_d, CUDECOMP_DOUBLE, piX% halo_extents, halo_periods, 2 ))
668690 CHECK_CUDECOMP_EXIT(cudecompUpdateHalosX(handle, grid_desc, phi_tmp, work_halo_d, CUDECOMP_DOUBLE, piX% halo_extents, halo_periods, 3 ))
669691 ! $acc end host_data
692+
670693 ! $acc kernels
671694 do k= 1 , piX% shape (3 )
672695 do j= 1 , piX% shape (2 )
@@ -784,6 +807,17 @@ program main
784807 enddo
785808 enddo
786809 ! $acc end parallel loop
810+ ! apply BC on phi_tmp (no-flux)
811+ ! $acc parallel loop collapse(3)
812+ do k= 1 , piX% shape (3 )
813+ do j= 1 , piX% shape (2 )
814+ do i= 1 ,nx
815+ kg = piX% lo(3 ) + k - 1 - halo_ext
816+ if (kg .eq. 1 ) phi_tmp(i,j,k-1 ) = phi_tmp(i,j,k)
817+ if (kg .eq. nz) phi_tmp(i,j,k+1 ) = phi_tmp(i,j,k)
818+ enddo
819+ enddo
820+ enddo
787821 ! 4.3 Call halo exchanges along Y and Z for phi
788822 ! $acc host_data use_device(phi_tmp)
789823 CHECK_CUDECOMP_EXIT(cudecompUpdateHalosX(handle, grid_desc, phi_tmp, work_halo_d, CUDECOMP_DOUBLE, piX% halo_extents, halo_periods, 2 ))
@@ -910,7 +944,17 @@ program main
910944 enddo
911945 enddo
912946 ! $acc end kernels
913-
947+ ! apply BC on phi_tmp (no-flux)
948+ ! $acc parallel loop collapse(3)
949+ do k= 1 , piX% shape (3 )
950+ do j= 1 , piX% shape (2 )
951+ do i= 1 ,nx
952+ kg = piX% lo(3 ) + k - 1 - halo_ext
953+ if (kg .eq. 1 ) phi(i,j,k-1 ) = phi(i,j,k)
954+ if (kg .eq. nz) phi(i,j,k+1 ) = phi(i,j,k)
955+ enddo
956+ enddo
957+ enddo
914958 ! 4.3 Call halo exchanges along Y and Z for phi
915959 ! $acc host_data use_device(phi)
916960 CHECK_CUDECOMP_EXIT(cudecompUpdateHalosX(handle, grid_desc, phi, work_halo_d, CUDECOMP_DOUBLE, piX% halo_extents, halo_periods, 2 ))
0 commit comments