GETINTARRAY Function

public function GETINTARRAY(Key, nIntegers, Proposal, quiet_def_in) result(GetIntArray)

Read array of "nIntegers" integer values named "Key" from ini file. If keyword "Key" is not found in setup file, the default values "Proposal" are used to create the array (error if "Proposal" not given). Setup file was read in before and is stored as list of character strings starting with "FirstString".

Arguments

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

Search for this keyword in ini file

integer, intent(in) :: nIntegers

Number of values in array

integer, intent(in), optional :: Proposal(:)

Default values as integer array

logical, intent(in), optional :: quiet_def_in

flag to be quiet if DEFAULT is taken

Return Value integer, (nIntegers)

Integer array read from setup file or initialized with default values


Calls

proc~~getintarray~~CallsGraph proc~getintarray GETINTARRAY interface~findstr FindStr proc~getintarray->interface~findstr proc~converttoproposalstr ConvertToProposalStr proc~getintarray->proc~converttoproposalstr proc~count_sep count_sep proc~getintarray->proc~count_sep interface~findstr->interface~findstr proc~remove_blanks remove_blanks proc~converttoproposalstr->proc~remove_blanks

Source Code

FUNCTION GETINTARRAY(Key,nIntegers,Proposal,quiet_def_in)
! MODULES
    IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
CHARACTER(LEN=*),INTENT(IN)          :: Key              !! Search for this keyword in ini file
INTEGER,INTENT(IN)                   :: nIntegers        !! Number of values in array
INTEGER         ,OPTIONAL,INTENT(IN) :: Proposal(:)      !! Default values as integer array
LOGICAL         ,OPTIONAL,INTENT(IN) :: quiet_def_in     !! flag to be quiet if DEFAULT is taken
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
INTEGER                   :: GetIntArray(nIntegers)      !! Integer array read from setup file or initialized with default values
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
CHARACTER(LEN=MAXLEN)           :: HelpStr,ProposalStr
CHARACTER(LEN=8)                :: tmpstrarray(nIntegers)
CHARACTER(LEN=8)                :: DefMsg,tmpstr
INTEGER                         :: iInteger
INTEGER                         :: ioerr
LOGICAL                         :: quiet_def
!===================================================================================================================================

IF (PRESENT(Proposal)) THEN
  CALL ConvertToProposalStr(ProposalStr,intarr=Proposal)
  CALL FindStr(Key,HelpStr,DefMsg,ProposalStr)
ELSE
  CALL FindStr(Key,HelpStr,DefMsg)
END IF
!count number of components
iInteger=1+count_sep(Key,helpstr,",")

IF(iInteger.NE.nIntegers)THEN
  WRITE(tmpstr,'(I8)')nIntegers
  CALL abort(__STAMP__,&
       "Problem reading parameter '"//TRIM(key)//"', expected integer array of size "//TRIM(tmpstr)//", got '= "//TRIM(helpStr)//"'", &
       TypeInfo="InvalidParameterError")
END IF

READ(HelpStr,*,IOSTAT=ioerr)tmpstrarray
IF(ioerr.NE.0)THEN
  CALL abort(__STAMP__,&
       "Problem reading parameter '"//TRIM(key)//"', expected integer array, got '= "//TRIM(helpStr)//"'", &
       TypeInfo="InvalidParameterError")
END IF
DO iInteger=1,nIntegers
   READ(tmpstrarray(iInteger),"(I8)",IOSTAT=ioerr) getIntArray(iInteger)
   IF(ioerr.NE.0)THEN
     CALL abort(__STAMP__,&
          "Problem reading parameter '"//TRIM(key)//"', expected integer array, got '= "//TRIM(helpStr)//"'", &
          TypeInfo="InvalidParameterError")
   END IF
END DO
quiet_def=.FALSE.
IF(PRESENT(quiet_def_in))THEN
  IF(INDEX(TRIM(DefMsg),"DEFAULT").NE.0)THEN
    quiet_def=quiet_def_in
  END IF
END IF
IF(.NOT.quiet_def) THEN
  SWRITE(UNIT_stdOut,'(a3,a30,a3,a28,i4,a4,a7,a3)',ADVANCE='NO') ' | ',TRIM(Key),' | ',&
                                                                 'Integer array of size (',nIntegers,') | ',TRIM(DefMsg),' | '
  DO iInteger=0,nIntegers-1
    IF ((iInteger.GT.0) .AND. (MOD(iInteger,8).EQ.0)) THEN
      SWRITE(UNIT_stdOut,*)
      SWRITE(UNIT_stdOut,'(a80,a3)',ADVANCE='NO')'',' | '
    END IF
    SWRITE(UNIT_stdOut,'(i5)',ADVANCE='NO')GetIntArray(iInteger+1)
  END DO
  SWRITE(UNIT_stdOut,*)
END IF !quiet_def

END FUNCTION GETINTARRAY