reims_config_file Function

public function reims_config_file() result(path)

Uses

  • proc~~reims_config_file~~UsesGraph proc~reims_config_file reims_config_file hdf5 hdf5 proc~reims_config_file->hdf5 iso_c_binding iso_c_binding proc~reims_config_file->iso_c_binding

Arguments

None

Return Value character(len=:), allocatable


Calls

proc~~reims_config_file~~CallsGraph proc~reims_config_file reims_config_file h5open_f h5open_f proc~reims_config_file->h5open_f nargs nargs proc~reims_config_file->nargs

Called by

proc~~reims_config_file~~CalledByGraph proc~reims_config_file reims_config_file program~reims_p reims_p program~reims_p->proc~reims_config_file

Source Code

function reims_config_file() result(path)
    use hdf5
    use iso_c_binding
    character(:),allocatable :: path
    character(1024) :: buff
    integer(c_int) :: err
    integer :: i
    type(c_ptr) :: ptr

    ! C functions interface declaration
    interface
        function c_chDir(new_path) bind(C ,name="chdir")
            import :: c_int
            character :: new_path(*)
            integer(c_int) :: c_chDir 
        end function
        function c_getCwd(buf, ln) bind(C, name="getcwd")
            import :: c_char, c_int, c_ptr
            type(c_ptr) :: c_getCwd
            character(c_char) :: buf(*)
            integer(c_int), value :: ln
        end function c_getCwd
    end interface

    call h5open_f(i)

    ptr = c_getCwd(buff,len(buff))
    i = scan(buff,char(0))
    saved_cwd = buff(:i)

    if (nArgs() == 0) error stop 'Please provide input yaml file name in the command line'
    call getArg(1, buff)
    i = scan(buff,'/\',.true.)
    if(i > 0) then
        err = c_chDir(buff(:i-1)//char(0))
    endif
    path = trim(buff(i+1:))
end function reims_config_file