silo_obj_Init Subroutine

private impure subroutine silo_obj_Init(this, filename, access_flag, parallel, nproc_node)

Initialize structure.

Type Bound

silo_obj

Arguments

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

A silo object

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

File to read/write

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

File access mode

type(parallel_obj), intent(in), target :: parallel

Parallel structure to link with

integer, intent(in), optional :: nproc_node

Number of procs per silo


Calls

proc~~silo_obj_init~~CallsGraph proc~silo_obj_init silo_obj%silo_obj_Init dbsetemptyok dbsetemptyok proc~silo_obj_init->dbsetemptyok proc~parallel_obj_rankisroot parallel_obj%parallel_obj_RankIsRoot proc~silo_obj_init->proc~parallel_obj_rankisroot proc~silo_obj_creategroups silo_obj%silo_obj_CreateGroups proc~silo_obj_init->proc~silo_obj_creategroups proc~stringtool_obj_removeextension stringtool_obj%stringtool_obj_RemoveExtension proc~silo_obj_init->proc~stringtool_obj_removeextension proc~sysutils_obj_createdirectory sysutils_obj%sysutils_obj_CreateDirectory proc~silo_obj_init->proc~sysutils_obj_createdirectory 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_init~~CalledByGraph proc~silo_obj_init silo_obj%silo_obj_Init 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_Init(this,filename,access_flag,parallel,nproc_node)
      !> Initialize structure.
      implicit none
      class(silo_obj),    intent(inout) :: this                                !! A silo object
      character(len=*),   intent(in)    :: filename                            !! File to read/write
      character(len=*),   intent(in)    :: access_flag                         !! File access mode
      type(parallel_obj), intent(in),    &
                                 target :: parallel                            !! Parallel structure to link with
      integer,            intent(in),    &
                               optional :: nproc_node                          !! Number of procs per silo
      ! Work variables
      type(sysutils_obj)   :: sysutils
      integer              :: ierr
      logical              :: file_exists
      type(stringtool_obj) :: stringtool

      ! Point to the master objects
      this%parallel => parallel

      ! Set the file name (remove any extension)
      this%filename = stringtool%RemoveExtension(filename)

      ! Collective IO Init
      ! -------------------------- !
      ! If present, set number of procs per SILO or else
      ! use default value
      this%nproc_node=SILOchannels
      if (present(nproc_node)) this%nproc_node=nproc_node
      call this%CreateGroups()

      ! Set the access flag
      this%access_flag=trim(adjustl(access_flag))

      ! Create Silo folder
      if (this%parallel%RankIsRoot()) &
        call sysutils%CreateDirectory(SILOdir)

      ! Create Visit file
      write(this%visitname,fmt='(4a)') SILOdir,'/',trim(adjustl(this%filename)),VISIT_EXTENSION
      if (this%parallel%RankIsRoot()) then
        inquire (file=this%visitname, exist=file_exists)
        if (.not.file_exists) then
          ! Create file
          open(newunit=this%fid_VisIt,file=trim(adjustl(this%visitname)),action='write',status='new',iostat=ierr)
          if (ierr.ne.0) call this%parallel%Stop('Unable to create VisIt file')
        else
          ! Open existing file
          open(newunit=this%fid_VisIt,file=trim(adjustl(this%visitname)),action='readwrite',access='sequential',form='formatted',status='old',iostat=ierr)
          if (ierr.ne.0) call this%parallel%Stop('Unable to create VisIt file')
        end if
      end if

      ! Allow Empty Silo Objects
     ierr = dbsetemptyok(1)

      return
    end subroutine silo_obj_Init