flow_mpi_t Derived Type

type, public :: flow_mpi_t

MPI context for hydrodynamic operations.

Stores rank information and pre-calculated cell ranges to avoid repeated division logic during the simulation loop.


Components

Type Visibility Attributes Name Initial
integer, public :: cell_halo_max_components = 4
integer, public, allocatable :: cell_owner(:)
integer, public, allocatable :: cell_recv_cells(:)
integer, public, allocatable :: cell_recv_counts(:)
integer, public, allocatable :: cell_recv_displs(:)
integer, public, allocatable :: cell_recv_ranks(:)
real(kind=rk), public, allocatable :: cell_recvbuf(:)
type(MPI_Request), public, allocatable :: cell_requests(:)
integer, public, allocatable :: cell_send_cells(:)
integer, public, allocatable :: cell_send_counts(:)
integer, public, allocatable :: cell_send_displs(:)
integer, public, allocatable :: cell_send_ranks(:)
real(kind=rk), public, allocatable :: cell_sendbuf(:)
type(MPI_Comm), public :: comm = MPI_COMM_NULL
integer, public, allocatable :: face_recv_counts(:)
integer, public, allocatable :: face_recv_displs(:)
integer, public, allocatable :: face_recv_faces(:)
integer, public, allocatable :: face_recv_ranks(:)
real(kind=rk), public, allocatable :: face_recvbuf(:)
type(MPI_Request), public, allocatable :: face_requests(:)
integer, public, allocatable :: face_send_counts(:)
integer, public, allocatable :: face_send_displs(:)
integer, public, allocatable :: face_send_faces(:)
integer, public, allocatable :: face_send_ranks(:)
real(kind=rk), public, allocatable :: face_sendbuf(:)
integer, public :: first_cell = 0
integer, public, allocatable :: gather_counts(:)
integer, public, allocatable :: gather_displs(:)
integer, public, allocatable :: gather_firsts(:)
integer, public, allocatable :: gather_matrix_counts(:)
integer, public, allocatable :: gather_matrix_displs(:)
real(kind=rk), public, allocatable :: gather_matrix_recvbuf(:)
real(kind=rk), public, allocatable :: gather_matrix_sendbuf(:)
integer, public :: gather_max_components = 0
real(kind=rk), public, allocatable :: gather_recvbuf(:)
real(kind=rk), public, allocatable :: gather_sendbuf(:)
integer, public, allocatable :: ghost_cells(:)
integer, public :: last_cell = -1
integer, public :: ncell_recv_ranks = 0
integer, public :: ncell_send_ranks = 0
integer, public :: nface_recv_ranks = 0
integer, public :: nface_send_ranks = 0
integer, public :: nlocal = 0
integer, public :: nprocs = 0
logical, public, allocatable :: owned(:)
integer, public, allocatable :: owned_faces(:)
integer, public :: rank = -1

Source Code

   type :: flow_mpi_t
      type(MPI_Comm) :: comm = MPI_COMM_NULL !< MPI Communicator for flow.
      integer :: rank = -1                   !< Local rank ID (0 to nprocs-1).
      integer :: nprocs = 0                  !< Total number of flow processors.
      integer :: first_cell = 0              !< First cell index owned by this rank.
      integer :: last_cell = -1              !< Last cell index owned by this rank.
      integer :: nlocal = 0                  !< Total number of cells owned locally.
      logical, allocatable :: owned(:)       !< Bitmask for all cells (True if owned by this rank).
      integer, allocatable :: cell_owner(:)  !< Zero-based MPI owner rank for each cell.
      integer, allocatable :: ghost_cells(:) !< Off-rank neighbor cells needed by owned cells.
      integer, allocatable :: owned_faces(:) !< Faces whose mesh owner cell is owned locally; owner computes owner-to-neighbor face fields.

      ! Cached metadata/buffers for gathering owned cell ranges.
      integer, allocatable :: gather_counts(:)
      integer, allocatable :: gather_displs(:)
      integer, allocatable :: gather_firsts(:)
      real(rk), allocatable :: gather_sendbuf(:)
      real(rk), allocatable :: gather_recvbuf(:)
      integer :: gather_max_components = 0
      integer, allocatable :: gather_matrix_counts(:)
      integer, allocatable :: gather_matrix_displs(:)
      real(rk), allocatable :: gather_matrix_sendbuf(:)
      real(rk), allocatable :: gather_matrix_recvbuf(:)

      ! Cached metadata/buffers for owned-cell halo exchange.
      integer :: cell_halo_max_components = 4
      integer :: ncell_send_ranks = 0
      integer :: ncell_recv_ranks = 0
      integer, allocatable :: cell_send_ranks(:)
      integer, allocatable :: cell_recv_ranks(:)
      integer, allocatable :: cell_send_counts(:)
      integer, allocatable :: cell_recv_counts(:)
      integer, allocatable :: cell_send_displs(:)
      integer, allocatable :: cell_recv_displs(:)
      integer, allocatable :: cell_send_cells(:)
      integer, allocatable :: cell_recv_cells(:)
      real(rk), allocatable :: cell_sendbuf(:)
      real(rk), allocatable :: cell_recvbuf(:)
      type(MPI_Request), allocatable :: cell_requests(:)

      ! Cached metadata/buffers for face-flux exchange.
      integer :: nface_send_ranks = 0
      integer :: nface_recv_ranks = 0
      integer, allocatable :: face_send_ranks(:)
      integer, allocatable :: face_recv_ranks(:)
      integer, allocatable :: face_send_counts(:)
      integer, allocatable :: face_recv_counts(:)
      integer, allocatable :: face_send_displs(:)
      integer, allocatable :: face_recv_displs(:)
      integer, allocatable :: face_send_faces(:)
      integer, allocatable :: face_recv_faces(:)
      real(rk), allocatable :: face_sendbuf(:)
      real(rk), allocatable :: face_recvbuf(:)
      type(MPI_Request), allocatable :: face_requests(:)
   end type flow_mpi_t