anchor.diff:              do i = 1, size(domain%nesting%send_comms, kind=ip)
   
                   call domain%nesting%send_comms(i)%process_data_to_send(domain%U)
  -                call domain%nesting%send_comms(i)%send_data(send_to_recv_buffer=send_to_recv_buffer)
  +                call domain%nesting%send_comms(i)%send_data(p2p, send_to_recv_buffer=send_to_recv_buffer)
               end do
               !!$OMP END DO
               !!$OMP END PARALLEL
  
positive.code: 
      end subroutine
  
      subroutine send_halos(domain, send_to_recv_buffer)
          !!
          !! Loop over domain%nesting%send_comms, and send the halo data
          !!
          class(domain_type), intent(inout) :: domain
          logical, intent(in) :: send_to_recv_buffer
              !! If .TRUE., then do parallel communication. If .FALSE., then only copy data
              !! to the send buffer (in that case, one can later call "communicate_p2p"
  
negative.code: 
      end subroutine
  
      subroutine receive_halos(domain, p2p)
          !!
          !! Loop over domain%nesting%receive_comms, and receive the halo data
          !!
          class(domain_type), intent(inout) :: domain
          type(p2p_comms_type), intent(in) :: p2p
  
          integer(ip) :: i, j, ii, jj, iL, iU, jL, jU, ip1, jp1, nbr_j, nbr_ti
          real(dp) :: elev_lim
  
  TIMER_START('receive_halos')
  
          !$OMP PARALLEL DEFAULT(PRIVATE) SHARED(domain, p2p)
          !$OMP DO SCHEDULE(DYNAMIC)
          do i = 1, size(domain%nesting%recv_comms, kind=ip)
  
              !! Avoid use of type-bound-procedure in openmp region
              !call domain%nesting%recv_comms(i)%process_received_data(domain%U)
              call process_received_data(domain%nesting%recv_comms(i), p2p, domain%U)
          end do
          !$OMP END DO
  
          !$OMP DO SCHEDULE(DYNAMIC)
          do i = 1, size(domain%nesting%recv_comms, kind=ip)
  