parser_obj_read0D Subroutine

private impure subroutine parser_obj_read0D(this, label, value, default)

Reads 0D (scalar) values of kind real, integer, logical, or character string. If label is not found and the optional default is provided, the value will be set to the default value. If the label is not found and there is no optional default, this subroutine will return an error.

Type Bound

parser_obj

Arguments

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

Parser object

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

Label

class(*), intent(out) :: value

Value to return

class(*), intent(in), optional :: default

Default value to return in case label is not found


Calls

proc~~parser_obj_read0d~~CallsGraph proc~parser_obj_read0d parser_obj%parser_obj_read0D none~assigndefault parser_obj%AssignDefault proc~parser_obj_read0d->none~assigndefault proc~parser_obj_fetchlabelid parser_obj%parser_obj_FetchLabelID proc~parser_obj_read0d->proc~parser_obj_fetchlabelid proc~parser_obj_assigndefault0d parser_obj%parser_obj_AssignDefault0D none~assigndefault->proc~parser_obj_assigndefault0d proc~parser_obj_assigndefault1d parser_obj%parser_obj_AssignDefault1D none~assigndefault->proc~parser_obj_assigndefault1d

Called by

proc~~parser_obj_read0d~~CalledByGraph proc~parser_obj_read0d parser_obj%parser_obj_read0D none~get~4 parser_obj%Get none~get~4->proc~parser_obj_read0d proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->none~get~4 proc~cdifs_obj_preparesolverbcs cdifs_obj_PrepareSolverBCS proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverbcs proc~cdifs_obj_preparesolverblock cdifs_obj_PrepareSolverBlock proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverblock proc~cdifs_obj_preparesolverbodyforce cdifs_obj_PrepareSolverBodyforce proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverbodyforce proc~cdifs_obj_preparesolverfields cdifs_obj_PrepareSolverFields proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverfields proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolveroperators proc~cdifs_obj_preparesolveroutput cdifs_obj_PrepareSolverOutput proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolveroutput proc~respart_set_prepare ResPart_set%ResPart_set_Prepare proc~cdifs_obj_preparesolver->proc~respart_set_prepare proc~cdifs_obj_preparesolverbcs->none~get~4 proc~cdifs_obj_preparesolverblock->none~get~4 proc~cdifs_obj_preparesolverbodyforce->none~get~4 proc~cdifs_obj_preparesolverfields->none~get~4 proc~cdifs_obj_preparesolveroperators->none~get~4 proc~cdifs_obj_preparesolveroutput->none~get~4 proc~collision_obj_prepare collision_obj%collision_obj_Prepare proc~collision_obj_prepare->none~get~4 proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->none~get~4 proc~grans_obj_preparesolverbcs grans_obj_PrepareSolverBCS proc~grans_obj_preparesolver->proc~grans_obj_preparesolverbcs proc~grans_obj_preparesolverblock grans_obj_PrepareSolverBlock proc~grans_obj_preparesolver->proc~grans_obj_preparesolverblock proc~grans_obj_preparesolvercollision grans_obj_PrepareSolverCollision proc~grans_obj_preparesolver->proc~grans_obj_preparesolvercollision proc~grans_obj_preparesolverfields grans_obj_PrepareSolverFields proc~grans_obj_preparesolver->proc~grans_obj_preparesolverfields proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolver->proc~grans_obj_preparesolveroperators proc~grans_obj_preparesolveroutput grans_obj_PrepareSolverOutput proc~grans_obj_preparesolver->proc~grans_obj_preparesolveroutput proc~marker_set_prepare marker_set%marker_set_Prepare proc~grans_obj_preparesolver->proc~marker_set_prepare proc~grans_obj_preparesolverbcs->none~get~4 proc~grans_obj_preparesolverblock->none~get~4 proc~grans_obj_preparesolvercollision->none~get~4 proc~grans_obj_preparesolvercollision->proc~collision_obj_prepare proc~grans_obj_preparesolverfields->none~get~4 proc~grans_obj_preparesolveroperators->none~get~4 proc~grans_obj_preparesolveroutput->none~get~4 proc~marker_set_prepare->none~get~4 proc~particle_set_prepare particle_set%particle_set_Prepare proc~particle_set_prepare->none~get~4 proc~respart_set_prepare->none~get~4 proc~timer_obj_init timer_obj%timer_obj_Init proc~timer_obj_init->none~get~4 program~main main program~main->none~get~4 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 parser_obj_read0D(this,label,value,default)
    !> Reads 0D (scalar) values of kind real, integer, logical, or character
    ! string.
    ! If label is not found and the optional default is provided, the value
    ! will be set to the default value. If the label is not found and there is
    ! no optional default, this subroutine will return an error.
    implicit none
    class(parser_obj), intent(inout) :: this                                   !! Parser object
    character(*),      intent(in)    :: label                                  !! Label
    class(*),          intent(out)   :: value                                  !! Value to return
    class(*),          intent(in),    &
                            optional :: default                                !! Default value to return in case label is not found
    ! Work variables
    integer :: entry_ID
    integer :: ierr

    ierr = 0

    ! Get ID of label (or 0 if not found)
    entry_ID = this%FetchLabelID(label)

    if (entry_ID.eq.0.and..not.present(default)) then
      write(stdout,*) 'Error in Parser: '// trim(adjustl(label)) //' not found'
      stop

    else if (entry_ID.eq.0.and.present(default)) then
      ! Check default and value are of the same type
      call this%AssignDefault(value,default)

    else
      select type (value)
      type is (logical)

        select case (trim(adjustl(this%entries(entry_ID)%value)))
        case ('1', '.true.', '.True.', '.TRUE.')
          value = .true.
        case ('0', '.false.', '.False.', '.FALSE.')
          value = .false.
        case default
          write(stdout,*) 'Error in Parser: invalid value for '// trim(adjustl(label))//'.'
        end select

      type is (real(leapDP))
        read(this%entries(entry_ID)%value,*,iostat=ierr) value
      type is (real(leapSP))
        read(this%entries(entry_ID)%value,*,iostat=ierr) value
      type is (integer(leapI4))
        read(this%entries(entry_ID)%value,*,iostat=ierr) value
      type is (integer(leapI8))
        read(this%entries(entry_ID)%value,*,iostat=ierr) value
      type is (character(len=*))
        value=trim(adjustl(this%entries(entry_ID)%value))
      class default
          stop "Error in Parser: unknown variable type"
      end select
    end if

    if (ierr.ne.0) then
      write(stdout,*) 'Error in Parser: An error occured while reading the value of: '// trim(adjustl(label))
      stop
    end if

    return
  end subroutine parser_obj_read0D