silo_obj_CreateGroups Subroutine

private impure subroutine silo_obj_CreateGroups(this)

Sets up silo groups for poor man's IO. Splits MPI ranks into groups of size nproc_node. Each group writes squentially to its own file.

Type Bound

silo_obj

Arguments

Type IntentOptional Attributes Name
class(silo_obj), intent(inout) :: this

A silo object


Calls

proc~~silo_obj_creategroups~~CallsGraph proc~silo_obj_creategroups silo_obj%silo_obj_CreateGroups mpi_comm_rank mpi_comm_rank proc~silo_obj_creategroups->mpi_comm_rank mpi_comm_split mpi_comm_split proc~silo_obj_creategroups->mpi_comm_split

Called by

proc~~silo_obj_creategroups~~CalledByGraph proc~silo_obj_creategroups silo_obj%silo_obj_CreateGroups proc~silo_obj_init silo_obj%silo_obj_Init proc~silo_obj_init->proc~silo_obj_creategroups proc~eulerian_set_writesilo eulerian_set%eulerian_set_WriteSILO proc~eulerian_set_writesilo->proc~silo_obj_init proc~particle_set_writesilo particle_set%particle_set_WriteSilo proc~particle_set_writesilo->proc~silo_obj_init proc~respart_set_writesilo ResPart_set%ResPart_set_WriteSILO proc~respart_set_writesilo->proc~silo_obj_init proc~cdifs_obj_writeoutputdata cdifs_obj_WriteOutputData proc~cdifs_obj_writeoutputdata->proc~respart_set_writesilo proc~grans_obj_writeoutputdata grans_obj_WriteOutputData proc~grans_obj_writeoutputdata->proc~respart_set_writesilo interface~cdifs_obj_writeoutputdata cdifs_obj%cdifs_obj_WriteOutputData interface~cdifs_obj_writeoutputdata->proc~cdifs_obj_writeoutputdata interface~grans_obj_writeoutputdata grans_obj%grans_obj_WriteOutputData interface~grans_obj_writeoutputdata->proc~grans_obj_writeoutputdata proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->interface~cdifs_obj_writeoutputdata proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->interface~grans_obj_writeoutputdata interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver

Source Code

    impure subroutine silo_obj_CreateGroups(this)
      !> Sets up silo groups for poor man's IO.
      ! Splits MPI ranks into groups of size nproc_node.
      ! Each group writes squentially to its own file.
      implicit none
      class(silo_obj),  intent(inout) :: this                                  !! A silo object
      !Work variables
      integer :: ierr,n

      ! Set the IDs of the different silo groups
      allocate(this%group_ids(this%parallel%nproc))

      do n=1,this%parallel%nproc
        this%group_ids(n)=ceiling(real(n,wp)/real(this%nproc_node,wp))
      end do

      ! Create a new MPI communicator for each silo group
      call MPI_COMM_SPLIT(this%parallel%comm%g,this%group_ids(this%parallel%rank%mine),0,this%silo_comm,ierr)

      ! Return rank within this communicator
      call MPI_COMM_RANK (this%silo_comm,this%silo_rank,ierr)

      ! Adjust rank numbering Fortran style
      this%silo_rank=this%silo_rank+1

      return
    end subroutine silo_obj_CreateGroups