save_snapshot_var_4d Subroutine

private subroutine save_snapshot_var_4d(params, var, var_name)

Arguments

Type IntentOptional AttributesName
type(KORC_PARAMS), intent(in) :: params
real(kind=rp), intent(in), DIMENSION(:,:,:,:), ALLOCATABLE:: var
character(len=MAX_STRING_LENGTH), intent(in) :: var_name

Contents

Source Code


Source Code

  SUBROUTINE save_snapshot_var_4d(params,var,var_name)
    IMPLICIT NONE
    TYPE(KORC_PARAMS), INTENT(IN) :: params
    REAL(rp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(IN) :: var
    CHARACTER(MAX_STRING_LENGTH), INTENT(IN) :: var_name
    CHARACTER(MAX_STRING_LENGTH) :: filename
    CHARACTER(MAX_STRING_LENGTH) :: gname
    CHARACTER(MAX_STRING_LENGTH) :: subgname
    CHARACTER(MAX_STRING_LENGTH), DIMENSION(:), ALLOCATABLE :: attr_array
    CHARACTER(MAX_STRING_LENGTH) :: dset
    CHARACTER(MAX_STRING_LENGTH) :: attr
    INTEGER(HID_T) :: h5file_id
    INTEGER(HID_T) :: group_id
    INTEGER(HID_T) :: subgroup_id
    CHARACTER(19) :: tmp_str
    INTEGER :: h5error
    INTEGER :: ss
    LOGICAL :: object_exists

    filename = TRIM(params%path_to_outputs) //"synthetic_camera_snapshots.h5"
    call h5fopen_f(TRIM(filename), H5F_ACC_RDWR_F, h5file_id, h5error)

    ! Create group 'it' if it doesn't exist
    write(tmp_str,'(I18)') params%it
    gname = TRIM(ADJUSTL(tmp_str))
    call h5lexists_f(h5file_id,TRIM(gname),object_exists,h5error)

    if (.NOT.object_exists) then
       call h5gcreate_f(h5file_id, TRIM(gname), group_id, h5error)

       dset = TRIM(gname) // "/time"
       attr = "Simulation time in secs"
       call save_to_hdf5(h5file_id,dset,REAL(params%it,rp)*params%dt*params%cpp%time,attr)
    else
       call h5gopen_f(h5file_id, TRIM(gname), group_id, h5error)
    end if

    do ss=1_idef,params%num_species
       write(tmp_str,'(I18)') ss
       subgname = "spp_" // TRIM(ADJUSTL(tmp_str))
       call h5lexists_f(group_id,TRIM(subgname),object_exists,h5error)

       if (.NOT.object_exists) then
          call h5gcreate_f(group_id, TRIM(subgname), subgroup_id, h5error)
       else
          call h5gopen_f(group_id, TRIM(subgname), subgroup_id, h5error)
       end if

       dset = TRIM(var_name)
       call h5lexists_f(subgroup_id,TRIM(dset),object_exists,h5error)
       if (.NOT.object_exists) then
          call save_array_to_hdf5(subgroup_id, dset, var(:,:,:,ss))
       end if

       call h5gclose_f(subgroup_id, h5error)
    end do

    call h5gclose_f(group_id, h5error)

    call h5fclose_f(h5file_id, h5error)
  END SUBROUTINE save_snapshot_var_4d