parser_obj_read1D Subroutine

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

Reads 1D (array) 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_read1d~~CallsGraph proc~parser_obj_read1d parser_obj%parser_obj_read1D none~assigndefault parser_obj%AssignDefault proc~parser_obj_read1d->none~assigndefault proc~parser_obj_fetchlabelid parser_obj%parser_obj_FetchLabelID proc~parser_obj_read1d->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_read1d~~CalledByGraph proc~parser_obj_read1d parser_obj%parser_obj_read1D none~get parser_obj%Get none~get->proc~parser_obj_read1d proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->none~get 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 proc~cdifs_obj_preparesolverblock->none~get proc~cdifs_obj_preparesolverbodyforce->none~get proc~cdifs_obj_preparesolverfields->none~get proc~cdifs_obj_preparesolveroperators->none~get proc~cdifs_obj_preparesolveroutput->none~get proc~collision_obj_prepare collision_obj%collision_obj_Prepare proc~collision_obj_prepare->none~get proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->none~get 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 proc~grans_obj_preparesolverblock->none~get proc~grans_obj_preparesolvercollision->none~get proc~grans_obj_preparesolvercollision->proc~collision_obj_prepare proc~grans_obj_preparesolverfields->none~get proc~grans_obj_preparesolveroperators->none~get proc~grans_obj_preparesolveroutput->none~get proc~marker_set_prepare->none~get proc~particle_set_prepare particle_set%particle_set_Prepare proc~particle_set_prepare->none~get proc~respart_set_prepare->none~get proc~setupcasebcs~13 SetUpCaseBCS proc~setupcasebcs~13->none~get proc~setupcasebcs~14 SetUpCaseBCS proc~setupcasebcs~14->none~get proc~setupcaseblock SetUpCaseBlock proc~setupcaseblock->none~get proc~setupcaseblock~10 SetUpCaseBlock proc~setupcaseblock~10->none~get proc~setupcaseblock~11 SetUpCaseBlock proc~setupcaseblock~11->none~get proc~setupcaseblock~12 SetUpCaseBlock proc~setupcaseblock~12->none~get proc~setupcaseblock~13 SetUpCaseBlock proc~setupcaseblock~13->none~get proc~setupcaseblock~14 SetUpCaseBlock proc~setupcaseblock~14->none~get proc~setupcaseblock~2 SetUpCaseBlock proc~setupcaseblock~2->none~get proc~setupcaseblock~3 SetUpCaseBlock proc~setupcaseblock~3->none~get proc~setupcaseblock~4 SetUpCaseBlock proc~setupcaseblock~4->none~get proc~setupcaseblock~5 SetUpCaseBlock proc~setupcaseblock~5->none~get proc~setupcaseblock~6 SetUpCaseBlock proc~setupcaseblock~6->none~get proc~setupcaseblock~7 SetUpCaseBlock proc~setupcaseblock~7->none~get proc~setupcaseblock~8 SetUpCaseBlock proc~setupcaseblock~8->none~get proc~setupcaseblock~9 SetUpCaseBlock proc~setupcaseblock~9->none~get proc~setupcasefields SetUpCaseFields proc~setupcasefields->none~get proc~setupcasefields~10 SetUpCaseFields proc~setupcasefields~10->none~get proc~setupcasefields~2 SetUpCaseFields proc~setupcasefields~2->none~get proc~setupcasefields~3 SetUpCaseFields proc~setupcasefields~3->none~get proc~setupcasefields~4 SetUpCaseFields proc~setupcasefields~4->none~get proc~setupcasefields~5 SetUpCaseFields proc~setupcasefields~5->none~get proc~setupcasefields~6 SetUpCaseFields proc~setupcasefields~6->none~get proc~setupcasefields~7 SetUpCaseFields proc~setupcasefields~7->none~get proc~setupcasefields~8 SetUpCaseFields proc~setupcasefields~8->none~get proc~setupcasefields~9 SetUpCaseFields proc~setupcasefields~9->none~get proc~setupcaseib SetUpCaseIB proc~setupcaseib->none~get proc~setupcaseib~2 SetUpCaseIB proc~setupcaseib~2->none~get proc~setupcaseib~3 SetUpCaseIB proc~setupcaseib~3->none~get proc~setupcaseib~4 SetUpCaseIB proc~setupcaseib~4->none~get proc~setupcasepp SetUpCasePP proc~setupcasepp->none~get proc~setupcasepp~2 SetUpCasePP proc~setupcasepp~2->none~get proc~setupcaserespart SetUpCaseResPart proc~setupcaserespart->none~get proc~setupcaserespart~2 SetUpCaseResPart proc~setupcaserespart~2->none~get proc~setupcaserp SetUpCaseRP proc~setupcaserp->none~get proc~setupcaserp~2 SetUpCaseRP proc~setupcaserp~2->none~get proc~setupcaserp~3 SetUpCaseRP proc~setupcaserp~3->none~get proc~timer_obj_init timer_obj%timer_obj_Init proc~timer_obj_init->none~get program~main~15 main program~main~15->none~get program~main~4 main program~main~4->none~get program~main~4->proc~setupcaseblock~4 program~main~4->proc~setupcaseib~2 program~main~4->proc~setupcaserp~2 program~main~9 main program~main~9->none~get program~main~9->proc~setupcaseblock~9 program~main~9->proc~setupcasefields~5 program~main~9->proc~setupcaseib~3 program~main~9->proc~setupcaserespart~2 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 program~main main program~main->proc~setupcaseblock program~main->proc~setupcasefields program~main->proc~setupcaserespart program~main~10 main program~main~10->proc~setupcaseblock~10 program~main~10->proc~setupcasefields~6 program~main~11 main program~main~11->proc~setupcaseblock~11 program~main~11->proc~setupcasefields~7 program~main~12 main program~main~12->proc~setupcaseblock~12 program~main~12->proc~setupcasefields~8 program~main~13 main program~main~13->proc~setupcasebcs~13 program~main~13->proc~setupcaseblock~13 program~main~13->proc~setupcasefields~9 program~main~14 main program~main~14->proc~setupcasebcs~14 program~main~14->proc~setupcaseblock~14 program~main~14->proc~setupcasefields~10 program~main~14->proc~setupcaseib~4 program~main~2 main program~main~2->proc~setupcaseblock~2 program~main~2->proc~setupcaseib program~main~2->proc~setupcaserp program~main~3 main program~main~3->proc~setupcaseblock~3 program~main~3->proc~setupcasefields~2 program~main~5 main program~main~5->proc~setupcaseblock~5 program~main~5->proc~setupcasefields~3 program~main~6 main program~main~6->proc~setupcaseblock~6 program~main~6->proc~setupcasepp program~main~6->proc~setupcaserp~3 program~main~7 main program~main~7->proc~setupcaseblock~7 program~main~7->proc~setupcasepp~2 program~main~8 main program~main~8->proc~setupcaseblock~8 program~main~8->proc~setupcasefields~4

Source Code

  impure subroutine parser_obj_read1D(this,label,value,default)
    !> Reads 1D (array) 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
    character(len=str8), &
            allocatable :: outputs(:)
    character(len=:),    &
            allocatable :: str
    integer             :: count
    integer             :: n

    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)

         ! Count number of entries
         str   = trim(adjustl(this%entries(entry_ID)%value))
         count = 0
         n     = 1
         do while (n.ne.0)
           count = count + 1
           str   = adjustl(str(n:len_trim(str)))
           n     = scan(trim(str),' ')
         end do

         allocate (outputs(count))
         read(this%entries(entry_ID)%value,*,iostat=ierr) outputs

         do n = 1, count

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

         end do

      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=*))
        read(this%entries(entry_ID)%value,*,iostat=ierr) 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_read1D