sysutils_obj_CreateDirectory Subroutine

private impure subroutine sysutils_obj_CreateDirectory(dirname)

Uses

  • proc~~sysutils_obj_createdirectory~~UsesGraph proc~sysutils_obj_createdirectory sysutils_obj%sysutils_obj_CreateDirectory iso_fortran_env iso_fortran_env proc~sysutils_obj_createdirectory->iso_fortran_env

Creates a directory using system commands.

Type Bound

sysutils_obj

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: dirname

Directory name


Called by

proc~~sysutils_obj_createdirectory~~CalledByGraph proc~sysutils_obj_createdirectory sysutils_obj%sysutils_obj_CreateDirectory proc~eulerian_set_writehdf5 eulerian_set%eulerian_set_WriteHDF5 proc~eulerian_set_writehdf5->proc~sysutils_obj_createdirectory proc~marker_set_writehdf5 marker_set%marker_set_WriteHDF5 proc~marker_set_writehdf5->proc~sysutils_obj_createdirectory proc~monitor_obj_init monitor_obj%monitor_obj_Init proc~monitor_obj_init->proc~sysutils_obj_createdirectory proc~particle_set_writehdf5 particle_set%particle_set_WriteHDF5 proc~particle_set_writehdf5->proc~sysutils_obj_createdirectory proc~respart_set_writehdf5 ResPart_set%ResPart_set_WriteHDF5 proc~respart_set_writehdf5->proc~sysutils_obj_createdirectory proc~respart_set_writehdf5->proc~marker_set_writehdf5 proc~silo_obj_init silo_obj%silo_obj_Init proc~silo_obj_init->proc~sysutils_obj_createdirectory proc~silo_obj_newtimestep silo_obj%silo_obj_NewTimeStep proc~silo_obj_newtimestep->proc~sysutils_obj_createdirectory proc~eulerian_set_writesilo eulerian_set%eulerian_set_WriteSILO proc~eulerian_set_writesilo->proc~silo_obj_init proc~eulerian_set_writesilo->proc~silo_obj_newtimestep proc~monitor_set_create monitor_set%monitor_set_Create proc~monitor_set_create->proc~monitor_obj_init proc~particle_set_writesilo particle_set%particle_set_WriteSilo proc~particle_set_writesilo->proc~silo_obj_init proc~particle_set_writesilo->proc~silo_obj_newtimestep proc~respart_set_writesilo ResPart_set%ResPart_set_WriteSILO proc~respart_set_writesilo->proc~silo_obj_init proc~respart_set_writesilo->proc~silo_obj_newtimestep proc~solid_set_writehdf5 solid_set%solid_set_WriteHDF5 proc~solid_set_writehdf5->proc~marker_set_writehdf5 proc~cdifs_obj_preparesolvermonitor cdifs_obj_PrepareSolverMonitor proc~cdifs_obj_preparesolvermonitor->proc~monitor_set_create proc~respart_set_createmonitor ResPart_set%ResPart_set_CreateMonitor proc~cdifs_obj_preparesolvermonitor->proc~respart_set_createmonitor proc~cdifs_obj_writeoutputdata cdifs_obj_WriteOutputData proc~cdifs_obj_writeoutputdata->proc~respart_set_writesilo proc~grans_obj_preparesolvermonitor grans_obj_PrepareSolverMonitor proc~grans_obj_preparesolvermonitor->proc~monitor_set_create proc~grans_obj_preparesolvermonitor->proc~respart_set_createmonitor proc~grans_obj_writeoutputdata grans_obj_WriteOutputData proc~grans_obj_writeoutputdata->proc~respart_set_writesilo proc~particle_set_createmonitor particle_set%particle_set_CreateMonitor proc~particle_set_createmonitor->proc~monitor_set_create proc~respart_set_createmonitor->proc~monitor_set_create 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->proc~cdifs_obj_preparesolvermonitor proc~cdifs_obj_preparesolver->interface~cdifs_obj_writeoutputdata proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_preparesolvermonitor 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 sysutils_obj_CreateDirectory(dirname)
      !> Creates a directory using system commands.
      use iso_fortran_env, only : stderr => error_unit
      implicit none
      character(len=*), intent(in) :: dirname                                  !! Directory name
      ! Work variables
      integer :: fid
      integer :: ierr

      ! Attempt to create a dummy file
      open(newunit=fid,file=trim(adjustl(dirname))//'/test',action='write',status='replace',iostat=ierr)
      if (ierr.eq. 0) then
        ! Folder exists and is writable
        ! Delete test file
        close(fid, status='delete')
      else
        ! Create folder
        call execute_command_line('mkdir -p '//trim(adjustl(dirname)), exitstat=ierr)

        if (ierr.ne.0) then
          write(stderr,*) 'Error creating directory: '//trim(adjustl(dirname))
          error stop
        end if

        ! Test folder is writable
        open(newunit=fid,file=trim(adjustl(dirname))//'/test',action='write',status='replace',iostat=ierr)
        if (ierr.eq. 0) then
          ! Delete test file
          close(fid, status='delete')
        else
          write(stderr,*) 'Unable to create/write in directory: '//trim(adjustl(dirname))
          error stop
        end if
      end if
      return
    end subroutine sysutils_obj_CreateDirectory