@@ -59,6 +59,8 @@ contains
5959
6060 if (qbmm .and. .not. polytropic) then
6161 v_size = sys_size + 2*nb*4
62+ else if (chemistry) then
63+ v_size = sys_size + 1
6264 else
6365 v_size = sys_size
6466 end if
@@ -705,11 +707,12 @@ contains
705707 mpi_dir, &
706708 pbc_loc, &
707709 nVar, &
708- pb_in, mv_in)
710+ pb_in, mv_in, q_T_sf )
709711
710712 type(scalar_field), dimension(1:), intent(inout) :: q_comm
711713 real(stp), optional, dimension(idwbuff(1)%beg:, idwbuff(2)%beg:, idwbuff(3)%beg:, 1:, 1:), intent(inout) :: pb_in, mv_in
712714 integer, intent(in) :: mpi_dir, pbc_loc, nVar
715+ type(scalar_field), optional, intent(inout) :: q_T_sf
713716
714717 integer :: i, j, k, l, r, q !< Generic loop iterators
715718
@@ -733,6 +736,13 @@ contains
733736 if (present(pb_in) .and. present(mv_in) .and. qbmm .and. .not. polytropic) then
734737 qbmm_comm = .true.
735738 v_size = nVar + 2*nb*4
739+ buffer_counts = (/ &
740+ buff_size*v_size*(n + 1)*(p + 1), &
741+ buff_size*v_size*(m + 2*buff_size + 1)*(p + 1), &
742+ buff_size*v_size*(m + 2*buff_size + 1)*(n + 2*buff_size + 1) &
743+ /)
744+ else if (chemistry) then
745+ v_size = nVar + 1
736746 buffer_counts = (/ &
737747 buff_size*v_size*(n + 1)*(p + 1), &
738748 buff_size*v_size*(m + 2*buff_size + 1)*(p + 1), &
@@ -795,6 +805,20 @@ contains
795805 end do
796806 end do
797807 $:END_GPU_PARALLEL_LOOP()
808+ if (chemistry) then
809+ $:GPU_PARALLEL_LOOP(collapse=3,private=' [r]' )
810+ do l = 0, p
811+ do k = 0, n
812+ do j = 0, buff_size - 1
813+ ! (v_size - 1) puts T at the end of the cell' s buffer chunk
814+ r = (v_size - 1 ) + v_size* &
815+ (j + buff_size* (k + (n + 1 )* l))
816+ buff_send(r) = real (q_T_sf%sf(j + pack_offset, k, l), kind= wp)
817+ end do
818+ end do
819+ end do
820+ $:END_GPU_PARALLEL_LOOP()
821+ end if
798822
799823 if (qbmm_comm) then
800824 $:GPU_PARALLEL_LOOP(collapse= 4 ,private= ' [r]' )
@@ -845,6 +869,21 @@ contains
845869 end do
846870 $:END_GPU_PARALLEL_LOOP()
847871
872+ if (chemistry) then
873+ $:GPU_PARALLEL_LOOP(collapse= 3 ,private= ' [r]' )
874+ do l = 0 , p
875+ do k = 0 , buff_size - 1
876+ do j = - buff_size, m + buff_size
877+ r = nVar + v_size* &
878+ ((j + buff_size) + (m + 2 * buff_size + 1 )* &
879+ (k + buff_size* l))
880+ buff_send(r) = real (q_T_sf%sf(j, k + pack_offset, l), kind= wp)
881+ end do
882+ end do
883+ end do
884+ $:END_GPU_PARALLEL_LOOP()
885+ end if
886+
848887 if (qbmm_comm) then
849888 $:GPU_PARALLEL_LOOP(collapse= 5 ,private= ' [r]' )
850889 do i = nVar + 1 , nVar + 4
@@ -896,6 +935,22 @@ contains
896935 end do
897936 $:END_GPU_PARALLEL_LOOP()
898937
938+ if (chemistry) then
939+ $:GPU_PARALLEL_LOOP(collapse= 3 ,private= ' [r]' )
940+ do l = 0 , buff_size - 1
941+ do k = - buff_size, n + buff_size
942+ do j = - buff_size, m + buff_size
943+ r = nVar + v_size* &
944+ ((j + buff_size) + (m + 2 * buff_size + 1 )* &
945+ ((k + buff_size) + (n + 2 * buff_size + 1 )* l))
946+ buff_send(r) = real (q_T_sf%sf(j, k, l + pack_offset), kind= wp)
947+ end do
948+ end do
949+ end do
950+ $:END_GPU_PARALLEL_LOOP()
951+ end if
952+
953+
899954 if (qbmm_comm) then
900955 $:GPU_PARALLEL_LOOP(collapse= 5 ,private= ' [r]' )
901956 do i = nVar + 1 , nVar + 4
@@ -1004,6 +1059,26 @@ contains
10041059 end do
10051060 $:END_GPU_PARALLEL_LOOP()
10061061
1062+ if (chemistry) then
1063+ $:GPU_PARALLEL_LOOP(collapse= 3 ,private= ' [r]' )
1064+ do l = 0 , p
1065+ do k = 0 , n
1066+ do j = - buff_size, - 1
1067+ r = nVar + v_size* &
1068+ (j + buff_size* ((k + 1 ) + (n + 1 )* l))
1069+ q_T_sf%sf(j + unpack_offset, k, l) = real (buff_recv(r), kind= stp)
1070+ #if defined(__INTEL_COMPILER)
1071+ if (ieee_is_nan(q_T_sf%sf(j, k, l))) then
1072+ print * , " Error" , j, k, l, i
1073+ error stop " NaN(s) in recv"
1074+ end if
1075+ #endif
1076+ end do
1077+ end do
1078+ end do
1079+ $:END_GPU_PARALLEL_LOOP()
1080+ end if
1081+
10071082 if (qbmm_comm) then
10081083 $:GPU_PARALLEL_LOOP(collapse= 5 ,private= ' [r]' )
10091084 do l = 0 , p
@@ -1059,6 +1134,27 @@ contains
10591134 end do
10601135 $:END_GPU_PARALLEL_LOOP()
10611136
1137+ if (chemistry) then
1138+ $:GPU_PARALLEL_LOOP(collapse= 3 ,private= ' [r]' )
1139+ do l = 0 , p
1140+ do k = - buff_size, - 1
1141+ do j = - buff_size, m + buff_size
1142+ r = nVar + v_size* &
1143+ ((j + buff_size) + (m + 2 * buff_size + 1 )* &
1144+ ((k + buff_size) + buff_size* l))
1145+ q_T_sf%sf(j, k + unpack_offset, l) = real (buff_recv(r), kind= stp)
1146+ #if defined(__INTEL_COMPILER)
1147+ if (ieee_is_nan(q_T_sf%sf(j, k, l))) then
1148+ print * , " Error" , j, k, l, i
1149+ error stop " NaN(s) in recv"
1150+ end if
1151+ #endif
1152+ end do
1153+ end do
1154+ end do
1155+ $:END_GPU_PARALLEL_LOOP()
1156+ end if
1157+
10621158 if (qbmm_comm) then
10631159 $:GPU_PARALLEL_LOOP(collapse= 5 ,private= ' [r]' )
10641160 do i = nVar + 1 , nVar + 4
@@ -1118,6 +1214,28 @@ contains
11181214 end do
11191215 $:END_GPU_PARALLEL_LOOP()
11201216
1217+ if (chemistry) then
1218+ $:GPU_PARALLEL_LOOP(collapse= 3 ,private= ' [r]' )
1219+ do l = - buff_size, - 1
1220+ do k = - buff_size, n + buff_size
1221+ do j = - buff_size, m + buff_size
1222+ r = nVar + v_size* &
1223+ ((j + buff_size) + (m + 2 * buff_size + 1 )* &
1224+ ((k + buff_size) + (n + 2 * buff_size + 1 )* &
1225+ (l + buff_size)))
1226+ q_T_sf%sf(j, k, l + unpack_offset) = real (buff_recv(r), kind= stp)
1227+ #if defined(__INTEL_COMPILER)
1228+ if (ieee_is_nan(q_T_sf%sf(j, k, l))) then
1229+ print * , " Error" , j, k, l, i
1230+ error stop " NaN(s) in recv"
1231+ end if
1232+ #endif
1233+ end do
1234+ end do
1235+ end do
1236+ $:END_GPU_PARALLEL_LOOP()
1237+ end if
1238+
11211239 if (qbmm_comm) then
11221240 $:GPU_PARALLEL_LOOP(collapse= 5 ,private= ' [r]' )
11231241 do i = nVar + 1 , nVar + 4
0 commit comments