flow_mpi_finalize Subroutine

public subroutine flow_mpi_finalize(flow)

Releases all MPI resources and buffers.

Arguments

Type IntentOptional Attributes Name
type(flow_mpi_t), intent(inout) :: flow

Source Code

   subroutine flow_mpi_finalize(flow)
      type(flow_mpi_t), intent(inout) :: flow
      integer :: ierr

      if (allocated(flow%owned)) deallocate(flow%owned)
      if (allocated(flow%gather_counts)) deallocate(flow%gather_counts)
      if (allocated(flow%gather_displs)) deallocate(flow%gather_displs)
      if (allocated(flow%gather_firsts)) deallocate(flow%gather_firsts)
      if (allocated(flow%gather_sendbuf)) deallocate(flow%gather_sendbuf)
      if (allocated(flow%gather_recvbuf)) deallocate(flow%gather_recvbuf)
      if (allocated(flow%gather_matrix_counts)) deallocate(flow%gather_matrix_counts)
      if (allocated(flow%gather_matrix_displs)) deallocate(flow%gather_matrix_displs)
      if (allocated(flow%gather_matrix_sendbuf)) deallocate(flow%gather_matrix_sendbuf)
      if (allocated(flow%gather_matrix_recvbuf)) deallocate(flow%gather_matrix_recvbuf)
      if (allocated(flow%cell_owner)) deallocate(flow%cell_owner)
      if (allocated(flow%ghost_cells)) deallocate(flow%ghost_cells)
      if (allocated(flow%owned_faces)) deallocate(flow%owned_faces)
      if (allocated(flow%cell_send_ranks)) deallocate(flow%cell_send_ranks)
      if (allocated(flow%cell_recv_ranks)) deallocate(flow%cell_recv_ranks)
      if (allocated(flow%cell_send_counts)) deallocate(flow%cell_send_counts)
      if (allocated(flow%cell_recv_counts)) deallocate(flow%cell_recv_counts)
      if (allocated(flow%cell_send_displs)) deallocate(flow%cell_send_displs)
      if (allocated(flow%cell_recv_displs)) deallocate(flow%cell_recv_displs)
      if (allocated(flow%cell_send_cells)) deallocate(flow%cell_send_cells)
      if (allocated(flow%cell_recv_cells)) deallocate(flow%cell_recv_cells)
      if (allocated(flow%cell_sendbuf)) deallocate(flow%cell_sendbuf)
      if (allocated(flow%cell_recvbuf)) deallocate(flow%cell_recvbuf)
      if (allocated(flow%cell_requests)) deallocate(flow%cell_requests)
      if (allocated(flow%face_send_ranks)) deallocate(flow%face_send_ranks)
      if (allocated(flow%face_recv_ranks)) deallocate(flow%face_recv_ranks)
      if (allocated(flow%face_send_counts)) deallocate(flow%face_send_counts)
      if (allocated(flow%face_recv_counts)) deallocate(flow%face_recv_counts)
      if (allocated(flow%face_send_displs)) deallocate(flow%face_send_displs)
      if (allocated(flow%face_recv_displs)) deallocate(flow%face_recv_displs)
      if (allocated(flow%face_send_faces)) deallocate(flow%face_send_faces)
      if (allocated(flow%face_recv_faces)) deallocate(flow%face_recv_faces)
      if (allocated(flow%face_sendbuf)) deallocate(flow%face_sendbuf)
      if (allocated(flow%face_recvbuf)) deallocate(flow%face_recvbuf)
      if (allocated(flow%face_requests)) deallocate(flow%face_requests)

      if (flow%comm /= MPI_COMM_NULL) then
         call MPI_Comm_free(flow%comm, ierr)
         call check_mpi(ierr, 'MPI_Comm_free flow')
      end if

      flow%comm = MPI_COMM_NULL
      flow%rank = -1
      flow%nprocs = 0
      flow%first_cell = 0
      flow%last_cell = -1
      flow%nlocal = 0
      flow%gather_max_components = 0
      flow%ncell_send_ranks = 0
      flow%ncell_recv_ranks = 0
      flow%nface_send_ranks = 0
      flow%nface_recv_ranks = 0
   end subroutine flow_mpi_finalize