Index: /codes/icosagcm/trunk/src/parallel/transfert.F90
===================================================================
--- /codes/icosagcm/trunk/src/parallel/transfert.F90	(revision 964)
+++ /codes/icosagcm/trunk/src/parallel/transfert.F90	(revision 965)
@@ -15,5 +15,5 @@
                                 wait_message, &
                                 test_message
-  
+
 #else
   use transfert_mpi_legacy_mod, only :  t_message, t_request, &
@@ -49,7 +49,5 @@
           req_i1, req_e1_scal, req_e1_vect, &
           req_i0, req_e0_scal, req_e0_vect, &
-#if !defined(CPP_USING_MPI_NEW)
           req_z1_scal, &
-#endif
           init_transfert, &
           init_message, &
@@ -99,14 +97,14 @@
   IMPLICIT NONE
     CHARACTER(LEN=*),INTENT(INOUT) :: Var
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_c
 
 !! -- Les entiers -- !!
-  
+
   SUBROUTINE bcast_i(var)
   IMPLICIT NONE
@@ -116,5 +114,5 @@
 !$OMP END MASTER
     CALL bcast_omp(Var)
-    
+
   END SUBROUTINE bcast_i
 
@@ -122,10 +120,10 @@
   IMPLICIT NONE
     INTEGER,INTENT(INOUT) :: Var(:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_i1
 
@@ -134,10 +132,10 @@
   IMPLICIT NONE
     INTEGER,INTENT(INOUT) :: Var(:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_i2
 
@@ -146,10 +144,10 @@
   IMPLICIT NONE
     INTEGER,INTENT(INOUT) :: Var(:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_i3
 
@@ -158,15 +156,15 @@
   IMPLICIT NONE
     INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_i4
 
- 
+
 !! -- Les reels -- !!
-  
+
   SUBROUTINE bcast_r(var)
   IMPLICIT NONE
@@ -177,5 +175,5 @@
 !$OMP END MASTER
     CALL bcast_omp(Var)
-    
+
   END SUBROUTINE bcast_r
 
@@ -183,10 +181,10 @@
   IMPLICIT NONE
     REAL,INTENT(INOUT) :: Var(:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_r1
 
@@ -195,10 +193,10 @@
   IMPLICIT NONE
     REAL,INTENT(INOUT) :: Var(:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_r2
 
@@ -207,10 +205,10 @@
   IMPLICIT NONE
     REAL,INTENT(INOUT) :: Var(:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_r3
 
@@ -219,15 +217,15 @@
   IMPLICIT NONE
     REAL,INTENT(INOUT) :: Var(:,:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
-  END SUBROUTINE bcast_r4 
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
+  END SUBROUTINE bcast_r4
 
 
 !! -- Les booleens -- !!
-  
+
   SUBROUTINE bcast_l(var)
   IMPLICIT NONE
@@ -237,5 +235,5 @@
 !$OMP END MASTER
     CALL bcast_omp(Var)
-    
+
   END SUBROUTINE bcast_l
 
@@ -243,10 +241,10 @@
   IMPLICIT NONE
     LOGICAL,INTENT(INOUT) :: Var(:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_l1
 
@@ -255,10 +253,10 @@
   IMPLICIT NONE
     LOGICAL,INTENT(INOUT) :: Var(:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_l2
 
@@ -267,10 +265,10 @@
   IMPLICIT NONE
     LOGICAL,INTENT(INOUT) :: Var(:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_l3
 
@@ -279,12 +277,12 @@
   IMPLICIT NONE
     LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
-   
-!$OMP MASTER
-    CALL bcast_mpi(Var)
-!$OMP END MASTER
-    CALL bcast_omp(Var)
-    
+
+!$OMP MASTER
+    CALL bcast_mpi(Var)
+!$OMP END MASTER
+    CALL bcast_omp(Var)
+
   END SUBROUTINE bcast_l4
 
-  
+
 END MODULE transfert_mod
Index: /codes/icosagcm/trunk/src/parallel/transfert_mpi.f90
===================================================================
--- /codes/icosagcm/trunk/src/parallel/transfert_mpi.f90	(revision 964)
+++ /codes/icosagcm/trunk/src/parallel/transfert_mpi.f90	(revision 965)
@@ -5,5 +5,5 @@
   use profiling_mod, only : enter_profile, exit_profile, register_id
   use domain_mod, only : ndomain, ndomain_glo, domain, domain_glo, domloc_glo_ind, domglo_rank, domglo_loc_ind
-  use field_mod, only : t_field, field_T, field_U
+  use field_mod, only : t_field, field_T, field_U, field_Z
   use transfert_request_mod
   implicit none
@@ -103,4 +103,5 @@
     type(t_submessage), allocatable :: message_in_tmp(:), message_out_tmp(:)
     type(t_submessage), pointer :: submessage
+    integer :: field_type
 
     !$omp barrier
@@ -110,4 +111,8 @@
     message%send_seq = 0
     message%wait_seq = 0
+
+    if( request(1)%field_type /= field(1)%field_type ) call dynamico_abort( "init_message : field_type/request mismatch" )
+    field_type = request(1)%field_type
+
     ! Set field%rval4d pointer to always use 4d array
     do ind = 1, ndomain
@@ -134,7 +139,7 @@
           if(request(ind_loc)%points_HtoB(remote_ind_glo)%npoints > 0 ) then ! Add only non-empty messages
             ! Add local message ind_loc -> remote_ind_glo, aggregarting submessage_in and submessage_out into submessage_local
-            submessage_out = make_submessage( request(ind_loc)%points_HtoB(remote_ind_glo), &
+            submessage_out = make_submessage( field_type, request(ind_loc)%points_HtoB(remote_ind_glo), &
                                               ind_loc, remote_ind_glo, dim3, dim4, request(1)%vector )
-            submessage_in = make_submessage(request(domglo_loc_ind(remote_ind_glo))%points_BtoH(domloc_glo_ind(ind_loc)), &
+            submessage_in = make_submessage( field_type, request(domglo_loc_ind(remote_ind_glo))%points_BtoH(domloc_glo_ind(ind_loc)), &
                                             domglo_loc_ind(remote_ind_glo), domloc_glo_ind(ind_loc), dim3, dim4, request(1)%vector)
             submessage_local%src_ind_loc = ind_loc
@@ -149,10 +154,10 @@
           ! When data to send to remote_domain, add submessage in message%message_out
           if( request(ind_loc)%points_HtoB(remote_ind_glo)%npoints > 0 ) then
-            submessage_out = make_submessage( request(ind_loc)%points_HtoB(remote_ind_glo), &
+            submessage_out = make_submessage( field_type, request(ind_loc)%points_HtoB(remote_ind_glo), &
                                               ind_loc, remote_ind_glo, dim3, dim4, request(1)%vector )
             call array_append_submessage( message_out_tmp, message_out_size, submessage_out )
           end if
           if( request(ind_loc)%points_BtoH(remote_ind_glo)%npoints > 0 ) then
-            submessage_in = make_submessage( request(ind_loc)%points_BtoH(remote_ind_glo), &
+            submessage_in = make_submessage( field_type, request(ind_loc)%points_BtoH(remote_ind_glo), &
                                              ind_loc, remote_ind_glo, dim3, dim4, request(1)%vector )
             call array_append_submessage( message_in_tmp, message_in_size, submessage_in )
@@ -185,6 +190,7 @@
   contains
     ! Generate submessage from points
-    function make_submessage(points, ind_loc, remote_ind_glo, dim3, dim4, vector) result(submessage)
-      use dimensions, only : swap_dimensions, iim, u_pos
+    function make_submessage(field_type, points, ind_loc, remote_ind_glo, dim3, dim4, vector) result(submessage)
+      use dimensions, only : swap_dimensions, iim, u_pos, z_pos
+      integer, intent(in) :: field_type
       type(t_points), intent(in) :: points
       integer, intent(in) :: ind_loc, remote_ind_glo, dim3, dim4
@@ -199,8 +205,9 @@
       allocate( submessage%displs( points%npoints ) )
       submessage%displs(:) = points%i + (points%j-1)*iim
-      if(allocated(points%edge)) submessage%displs = submessage%displs + u_pos( points%edge )
+      if(field_type == field_U) submessage%displs = submessage%displs + u_pos( points%elt )
+      if(field_type == field_Z) submessage%displs = submessage%displs + z_pos( points%elt )
       allocate(submessage%sign( points%npoints ))
-      if( vector ) then
-        submessage%sign(:) = (/( domain(ind_loc)%edge_assign_sign(points%edge(k)-1, points%i(k), points%j(k)) ,k=1,points%npoints)/)
+      if( vector ) then ! For U fields only
+        submessage%sign(:) = (/( domain(ind_loc)%edge_assign_sign(points%elt(k)-1, points%i(k), points%j(k)) ,k=1,points%npoints)/)
       else
         submessage%sign(:) = 1
@@ -380,5 +387,5 @@
     message%send_seq = message%send_seq + 1
     !$omp end master
-    
+
     call enter_profile(profile_mpi_barrier)
     !$omp barrier
@@ -411,5 +418,5 @@
     do i = 1, size( message%message_local )
       if( assigned_domain( message%message_local(i)%dest_ind_loc ) ) then
-        !$acc loop collapse(2) 
+        !$acc loop collapse(2)
         do d4 = 1, dim4
           do d3 = d3_begin, d3_end
Index: /codes/icosagcm/trunk/src/parallel/transfert_requests.F90
===================================================================
--- /codes/icosagcm/trunk/src/parallel/transfert_requests.F90	(revision 964)
+++ /codes/icosagcm/trunk/src/parallel/transfert_requests.F90	(revision 965)
@@ -2,5 +2,5 @@
 module transfert_request_mod
   use abort_mod
-  use field_mod, only : t_field, field_T, field_U
+  use field_mod, only : t_field, field_T, field_U, field_Z
   use domain_mod, only : ndomain, ndomain_glo, domain, domain_glo, domloc_glo_ind, domglo_rank, domglo_loc_ind
   implicit none
@@ -9,5 +9,6 @@
   ! Points for t_request : list of points coordinates in a domain
   type t_points
-    integer, allocatable :: i(:), j(:), edge(:)
+    integer, allocatable :: i(:), j(:)
+    integer, allocatable :: elt(:) ! Element : cell edge or cell point
     integer :: npoints
   end type
@@ -26,5 +27,5 @@
   type(t_request),save,pointer :: req_e1_scal(:) ! Halos for U fields
   type(t_request),save,pointer :: req_e1_vect(:) ! Halos for U fields (with sign change)
-  type(t_request),save,pointer :: req_z1_scal(:) => null() ! DO NOT USE : not initialized
+  type(t_request),save,pointer :: req_z1_scal(:) ! Halos for Z fields
 
   type(t_request),save,pointer :: req_i0(:) ! Duplicated cells for T fields
@@ -42,5 +43,5 @@
   subroutine init_all_requests
     use dimensions, only : swap_dimensions, ii_begin, ii_end, jj_begin, jj_end
-    use metric, only : right, rdown, ldown, left, lup, rup
+    use metric, only : right, rdown, ldown, left, lup, rup, vdown, vlup, vrdown, vrup, vup
     integer :: ind, i, j
 
@@ -131,24 +132,50 @@
     req_e1_vect = req_e1_scal
     req_e1_vect%vector = .true.
+
+    call request_init(req_z1_scal, field_z)
+    do ind=1,ndomain
+      call swap_dimensions(ind)
+      do i=ii_begin,ii_end
+        call request_add_point(req_z1_scal,ind,i,jj_begin-1,vrup)
+        call request_add_point(req_z1_scal,ind,i+1,jj_begin-1,vup)
+      enddo
+      do j=jj_begin,jj_end
+        call request_add_point(req_z1_scal,ind,ii_end+1,j,vlup)
+      enddo
+      do j=jj_begin,jj_end
+        call request_add_point(req_z1_scal,ind,ii_end+1,j-1,vup)
+      enddo
+      do i=ii_begin,ii_end
+        call request_add_point(req_z1_scal,ind,i,jj_end+1,vdown)
+        call request_add_point(req_z1_scal,ind,i-1,jj_end+1,vrdown)
+      enddo
+      do j=jj_begin,jj_end
+        call request_add_point(req_z1_scal,ind,ii_begin-1,j,vrup)
+      enddo
+      do j=jj_begin,jj_end
+        call request_add_point(req_z1_scal,ind,ii_begin-1,j,vrdown)
+      enddo
+    enddo
+    call request_exchange(req_z1_scal)
   contains
 
     ! ---- Points ----
     ! Initialize (allocate) points
-    subroutine points_init(points, has_edges)
+    subroutine points_init(points, has_elt)
       type(t_points):: points
-      logical :: has_edges
+      logical :: has_elt
       integer, parameter :: INITIAL_ALLOC_SIZE = 10
 
       allocate(points%i(INITIAL_ALLOC_SIZE))
       allocate(points%j(INITIAL_ALLOC_SIZE))
-      if(has_edges) allocate(points%edge(INITIAL_ALLOC_SIZE))
+      if(has_elt) allocate(points%elt(INITIAL_ALLOC_SIZE))
       points%npoints = 0
     end subroutine
 
-    ! Append point (i, j [,edge]) to point list
-    subroutine points_append(points, i, j, edge)
+    ! Append point (i, j [,elt]) to point list
+    subroutine points_append(points, i, j, elt)
       type(t_points), intent(inout):: points
       integer, intent(in) :: i, j
-      integer, intent(in), optional :: edge
+      integer, intent(in), optional :: elt
       integer :: begin_size
 
@@ -157,12 +184,12 @@
       begin_size=points%npoints
       call array_append( points%j, begin_size, j )
-      if(present(edge)) then
+      if(present(elt)) then
         begin_size=points%npoints
-        call array_append( points%edge, begin_size, edge )
+        call array_append( points%elt, begin_size, elt )
       end if
 
       points%npoints = points%npoints + 1
     end subroutine
-    
+
     ! Add element to array, and reallocate if necessary
     subroutine array_append( a, a_size, elt )
@@ -172,5 +199,5 @@
       integer, allocatable :: a_tmp(:)
       integer, parameter :: GROW_FACTOR = 2
-      
+
       if( size( a ) <= a_size ) then
         allocate( a_tmp ( a_size * GROW_FACTOR ) )
@@ -192,5 +219,5 @@
 
       displs = (points%i-1) + (points%j-1)*iim
-      if(allocated(points%edge)) displs = displs + (points%edge-1)*iim*jjm
+      if(allocated(points%elt)) displs = displs + (points%elt-1)*iim*jjm
 
       last=0
@@ -210,7 +237,7 @@
         points%j(k) = mod((displs(k)-(points%i(k)-1))/iim, jjm)+1
       end do
-      if(allocated(points%edge)) then
-        deallocate(points%edge); allocate(points%edge(last))
-        points%edge(:) = displs(1:last)/(iim*jjm) + 1
+      if(allocated(points%elt)) then
+        deallocate(points%elt); allocate(points%elt(last))
+        points%elt(:) = displs(1:last)/(iim*jjm) + 1
       end if
 
@@ -231,5 +258,5 @@
         allocate(request(ind)%points_HtoB(ndomain_glo))
         do remote_ind_glo = 1, ndomain_glo
-          call points_init(request(ind)%points_BtoH(remote_ind_glo), field_type == field_U)
+          call points_init(request(ind)%points_BtoH(remote_ind_glo), field_type /= field_T)
           !call points_init(request(ind)%points_HtoB(remote_ind_glo)) ! Initialized before MPI communication in request_exchange
         end do
@@ -238,12 +265,15 @@
 
     ! Append local point (ind_glo,i,j) to the point list of domain ind, where ind_glo is the domain owning the point
-    subroutine request_add_point(req, ind, i, j, edge)
+    subroutine request_add_point(req, ind, i, j, elt)
       type(t_request), intent(inout) :: req(:)
       integer :: ind, i, j
-      integer, optional :: edge
-
-      if( present(edge) ) then ! U field
-        if(domain(ind)%edge_assign_domain(edge-1,i,j) /= domloc_glo_ind(ind) ) & ! Add only if remote domain != local domain
-        call points_append(req(ind)%points_BtoH(domain(ind)%edge_assign_domain(edge-1,i,j)), i, j, edge )
+      integer, optional :: elt
+
+      if( req(ind)%field_type == field_U ) then
+        if(domain(ind)%edge_assign_domain(elt-1,i,j) /= domloc_glo_ind(ind) ) & ! Add only if remote domain != local domain
+        call points_append(req(ind)%points_BtoH(domain(ind)%edge_assign_domain(elt-1,i,j)), i, j, elt )
+      else if( req(ind)%field_type == field_Z ) then
+        if(domain(ind)%vertex_assign_domain(elt-1,i,j) /= domloc_glo_ind(ind) ) & ! Add only if remote domain != local domain
+        call points_append(req(ind)%points_BtoH(domain(ind)%vertex_assign_domain(elt-1,i,j)), i, j, elt )
       else ! T field
         if(domain(ind)%assign_domain(i,j) /= domloc_glo_ind(ind) ) &
@@ -262,5 +292,5 @@
 
       integer :: ind_loc, remote_ind_glo, k
-      integer :: i, j, edge
+      integer :: i, j, elt
       integer :: reqs(ndomain, ndomain_glo, 2), reqs2(ndomain, ndomain_glo, 2), reqs3(ndomain, ndomain_glo, 3), ierr
 
@@ -271,17 +301,22 @@
           points => req(ind_loc)%points_BtoH(remote_ind_glo)
           call points_sort(points)
-          call points_init( points_send(ind_loc,remote_ind_glo), req(ind_loc)%field_type == field_U )
+          call points_init( points_send(ind_loc,remote_ind_glo), req(ind_loc)%field_type /= field_T )
           do k = 1, points%npoints
             i = points%i(k)
             j = points%j(k)
-            if(req(ind_loc)%field_type == field_T) then
+            if( req(ind_loc)%field_type == field_U ) then
+              elt = points%elt(k) - 1 ! WARNING : domain%edge_assign_* use index in 0:5 instead of 1:6 everywhere else
+              call points_append(points_send(ind_loc,remote_ind_glo), domain(ind_loc)%edge_assign_i(elt,i,j), &
+                domain(ind_loc)%edge_assign_j(elt,i,j), &
+                domain(ind_loc)%edge_assign_pos(elt,i,j)+1)
+            else if( req(ind_loc)%field_type == field_Z ) then
+              elt = points%elt(k) - 1 ! WARNING : domain%vertex_assign_* use index in 0:5 instead of 1:6 everywhere else
+              call points_append(points_send(ind_loc,remote_ind_glo), domain(ind_loc)%vertex_assign_i(elt,i,j), &
+                domain(ind_loc)%vertex_assign_j(elt,i,j), &
+                domain(ind_loc)%vertex_assign_pos(elt,i,j)+1)
+            else ! T field
               call points_append(points_send(ind_loc,remote_ind_glo), domain(ind_loc)%assign_i(i,j), &
                 domain(ind_loc)%assign_j(i,j))
-            else
-              edge = points%edge(k) - 1 ! WARNING : domain%edge_assign_* use index in 0:5 instead of 1:6 everywhere else
-              call points_append(points_send(ind_loc,remote_ind_glo), domain(ind_loc)%edge_assign_i(edge,i,j), &
-                domain(ind_loc)%edge_assign_j(edge,i,j), &
-                domain(ind_loc)%edge_assign_pos(edge,i,j)+1)
-            end if
+            endif
           end do
         end do
@@ -317,10 +352,10 @@
             domloc_glo_ind(ind_loc)+ndomain_glo*remote_ind_glo, comm_icosa, reqs2(ind_loc,remote_ind_glo,2), ierr)
 
-          if(req(1)%field_type == field_U) then
-            call MPI_Isend( points_send(ind_loc,remote_ind_glo)%edge, points_send(ind_loc,remote_ind_glo)%npoints, MPI_INT, &
+          if(req(1)%field_type /= field_T) then
+            call MPI_Isend( points_send(ind_loc,remote_ind_glo)%elt, points_send(ind_loc,remote_ind_glo)%npoints, MPI_INT, &
               domglo_rank(remote_ind_glo), remote_ind_glo+ndomain_glo*domloc_glo_ind(ind_loc), &
               comm_icosa, reqs3(ind_loc,remote_ind_glo,1), ierr  )
-            allocate( points%edge( points%npoints ) )
-            call MPI_Irecv( points%edge, points%npoints, MPI_INT, &
+            allocate( points%elt( points%npoints ) )
+            call MPI_Irecv( points%elt, points%npoints, MPI_INT, &
               domglo_rank(remote_ind_glo), domloc_glo_ind(ind_loc)+ndomain_glo*remote_ind_glo, &
               comm_icosa, reqs3(ind_loc,remote_ind_glo,2), ierr )
@@ -330,5 +365,5 @@
       call waitall(reqs,ndomain*ndomain_glo*2)
       call waitall(reqs2,ndomain*ndomain_glo*2)
-      if(req(1)%field_type == field_U) call waitall(reqs3,ndomain*ndomain_glo*2)
+      if(req(1)%field_type /= field_T) call waitall(reqs3,ndomain*ndomain_glo*2)
     end subroutine
 
