silo_obj_SetupGroupFiles Subroutine

private impure subroutine silo_obj_SetupGroupFiles(this, flag)

Creates silo files and their internal structure.

Type Bound

silo_obj

Arguments

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

A silo object

character(len=*), intent(in) :: flag

IO flag


Calls

proc~~silo_obj_setupgroupfiles~~CallsGraph proc~silo_obj_setupgroupfiles silo_obj%silo_obj_SetupGroupFiles dbclose dbclose proc~silo_obj_setupgroupfiles->dbclose dbcreate dbcreate proc~silo_obj_setupgroupfiles->dbcreate dbmkdir dbmkdir proc~silo_obj_setupgroupfiles->dbmkdir mpi_barrier mpi_barrier proc~silo_obj_setupgroupfiles->mpi_barrier mpi_comm_size mpi_comm_size proc~silo_obj_setupgroupfiles->mpi_comm_size

Called by

proc~~silo_obj_setupgroupfiles~~CalledByGraph proc~silo_obj_setupgroupfiles silo_obj%silo_obj_SetupGroupFiles proc~silo_obj_newtimestep silo_obj%silo_obj_NewTimeStep proc~silo_obj_newtimestep->proc~silo_obj_setupgroupfiles proc~eulerian_set_writesilo eulerian_set%eulerian_set_WriteSILO proc~eulerian_set_writesilo->proc~silo_obj_newtimestep proc~particle_set_writesilo particle_set%particle_set_WriteSilo proc~particle_set_writesilo->proc~silo_obj_newtimestep proc~respart_set_writesilo ResPart_set%ResPart_set_WriteSILO proc~respart_set_writesilo->proc~silo_obj_newtimestep 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_SetupGroupFiles(this,flag)
      !> Creates silo files and their internal structure.
      implicit none
      class(silo_obj),  intent(inout) :: this                                  !! A silo object
      character(len=*), intent(in)    :: flag                                  !! IO flag
      ! Work variables
      character(len=5)          :: dirname
      integer :: n
      integer :: ntask
      integer :: status
      integer :: ierr

      ! Create SILO directories
      call MPI_COMM_SIZE(this%silo_comm,ntask,ierr)

      select case(trim(adjustl(flag)))
      case ("W")
        ! Group DB name
        write(this%siloname, '(3A,I5.5,A)') trim(adjustl(this%filepath)),trim(adjustl(this%filename)),'_g_',this%group_ids(this%parallel%rank%mine),SILO_EXTENSION

        ! Group root creates SILO database
        If (this%silo_rank.eq.1) then
          ! Create database
          ierr = DBcreate(this%siloname,len_trim(this%siloname),DB_CLOBBER,DB_LOCAL, &
                 SILOinfo,len_trim(SILOinfo),SILOdriver,this%fid_DAT)

          if (this%fid_DAT.eq.-1) call this%parallel%Stop('Unable to create SILO file')

          ! Create directories for the different MPI tasks
          do n=1,ntask
            write(dirname, '(I5.5)') n
            ierr = DBmkdir(this%fid_DAT,dirname,len_trim(dirname),status)
          end do

          ! Close group file
          ierr =DBclose(this%fid_DAT)
          if (ierr.ne.0) call this%parallel%Stop('Error closing SILO file')
        end if

        ! Store directory name for this silo_rank
        write(this%dirname, '(I5.5)') this%silo_rank

      case default
        call this%parallel%Stop("SILO files can only be opened in W mode")
      end select

      ! Wait on all rank within this SILO group
      call MPI_BARRIER(this%silo_comm)

      return
    end subroutine silo_obj_SetupGroupFiles