MODULE MOD_BIOINP USE MOD_1D USE MOD_UTILS2 CONTAINS !==============================================================================! ! DECOMPOSE INPUT LINE INTO VARIABLE NAME AND VARIABLE VALUE(S) ! !==============================================================================! SUBROUTINE GET_VAL(LNUM,NUMCHAR,TEXT_LINE,VARNAME,VARTYPE,LOGVAL,STRINGVAL,& REALVAL,INTVAL,NVAL) !==============================================================================! IMPLICIT NONE INTEGER, INTENT(IN) :: LNUM,NUMCHAR CHARACTER(LEN=NUMCHAR) :: TEXT_LINE CHARACTER(LEN=20), INTENT(OUT) :: VARNAME CHARACTER(LEN=7), INTENT(OUT) :: VARTYPE LOGICAL, INTENT(OUT) :: LOGVAL CHARACTER(LEN=80), INTENT(OUT) :: STRINGVAL(150) REAL(SPP), INTENT(INOUT) :: REALVAL(150) INTEGER, INTENT(INOUT) :: INTVAL(150) INTEGER, INTENT(OUT) :: NVAL !------------------------------------------------------------------------------! CHARACTER(LEN=NUMCHAR) :: VARVAL,TEMP,FRAG(200) CHARACTER(LEN=80) :: TSTRING CHARACTER(LEN=6) :: ERRSTRING CHARACTER(LEN=16) :: NUMCHARS INTEGER LENGTH,EQLOC,LVARVAL,DOTLOC INTEGER I,J,LOCEX,NP LOGICAL ONFRAG !==============================================================================! FRAG = " " NUMCHARS = "0123456789+-Ee. " VARTYPE = "error" LOGVAL = .FALSE. LENGTH = LEN_TRIM(TEXT_LINE) WRITE(ERRSTRING,"(I6)") LNUM LOCEX = INDEX(TEXT_LINE,"!") ! !-----------------------CHECK FOR BLANK LINE OR COMMENT------------------------! ! IF(LENGTH == 0 .OR. LOCEX==1)THEN VARTYPE = "no data" VARNAME = "no data" RETURN END IF ! !-----------------------CHANGE COMMAS TO BLANKS--------------------------------! ! DO I=1,LENGTH IF(TEXT_LINE(I:I) == ",") TEXT_LINE(I:I) = " " END DO ! !-----------------------REMOVING TRAILING COMMENTS-----------------------------! ! IF(LOCEX /= 0)THEN TEMP = TEXT_LINE(1:LOCEX-1) TEXT_LINE = TEMP END IF ! !--------------------ENSURE "=" EXISTS AND DETERMINE LOCATION------------------! ! EQLOC = INDEX(TEXT_LINE,"=") IF(EQLOC == 0) CALL PERROR(6,'DATA LINE '//ERRSTRING//' MUST CONTAIN "=" ') ! !--------------------SPLIT OFF VARNAME AND VARVAL STRINGS----------------------! ! VARNAME = TEXT_LINE(1:EQLOC-1) VARVAL = ADJUSTL(TEXT_LINE(EQLOC+1:LENGTH)) LVARVAL = LEN_TRIM(VARVAL) IF(LVARVAL == 0) CALL PERROR(6,'IN DATA PARAMETER FILE', & 'VARIABLE LINE'//ERRSTRING//' HAS NO ASSOCIATED VALUE') ! !-----------------DETERMINE TYPE OF VARVAL-------------------------------------! ! ! ! CHECK FOR LOGICAL ! IF((VARVAL(1:1) == "T" .OR. VARVAL(1:1) == "F") .AND. LVARVAL == 1)THEN VARTYPE = "logical" IF(VARVAL(1:1) == "T") LOGVAL = .TRUE. RETURN END IF ! ! CHECK IF IT IS A STRING (CONTAINS CHARACTERS OTHER THAN 0-9,+,-,e,E,.) ! DO I=1,LVARVAL IF(INDEX(NUMCHARS,VARVAL(I:I)) == 0) VARTYPE = "string" END DO ! ! PROCESS STRING (MAY BE MULTIPLE) ! IF(VARTYPE == "string") THEN TSTRING = VARVAL STRINGVAL(1) = TSTRING NVAL = 1 ONFRAG = .TRUE. DO I=1,LVARVAL IF(VARVAL(I:I) /= " ")THEN FRAG(NVAL) = TRIM(FRAG(NVAL))//VARVAL(I:I) ONFRAG = .TRUE. ELSE IF(ONFRAG) NVAL = NVAL + 1 ONFRAG = .FALSE. END IF END DO DO I=1,NVAL STRINGVAL(I+1) = TRIM(FRAG(I)) END DO RETURN END IF ! ! CHECK IF IT IS A FLOAT ! DOTLOC = INDEX(VARVAL,".") IF(DOTLOC /= 0) THEN VARTYPE = "float" ELSE VARTYPE = "integer" END IF ! !-----------------FRAGMENT INTO STRINGS FOR MULTIPLE VALUES---------------------! ! NP = 1 ONFRAG = .TRUE. DO I=1,LVARVAL IF(VARVAL(I:I) /= " ")THEN FRAG(NP) = TRIM(FRAG(NP))//VARVAL(I:I) ONFRAG = .TRUE. ELSE IF(ONFRAG) NP = NP + 1 ONFRAG = .FALSE. END IF END DO ! !-----------------EXTRACT NUMBER(S) FROM CHARACTER STRINGS----------------------! ! NVAL = NP DO I=1,NP TEMP = TRIM(FRAG(I)) IF(VARTYPE == "float") THEN READ(TEMP,*)REALVAL(I) ELSE READ(TEMP,*)INTVAL(I) END IF END DO END SUBROUTINE GET_VAL !==============================================================================! ! DECOMPOSE INPUT LINE INTO VARIABLE NAME AND VARIABLE VALUE(S) ! !==============================================================================! SUBROUTINE GET_VALUE(LNUM,NUMCHAR,TEXT_LINE,VARNAME,VARTYPE,LOGVAL,STRINGVAL,& REALVAL,INTVAL,NVAL) !==============================================================================! IMPLICIT NONE INTEGER, INTENT(IN) :: LNUM,NUMCHAR CHARACTER(LEN=NUMCHAR) :: TEXT_LINE CHARACTER(LEN=40), INTENT(OUT) :: VARNAME CHARACTER(LEN=7), INTENT(OUT) :: VARTYPE LOGICAL, INTENT(OUT) :: LOGVAL CHARACTER(LEN=80), INTENT(OUT) :: STRINGVAL(150) REAL(DPP), INTENT(INOUT) :: REALVAL(150) INTEGER, INTENT(INOUT) :: INTVAL(150) INTEGER, INTENT(OUT) :: NVAL !------------------------------------------------------------------------------! CHARACTER(LEN=NUMCHAR) :: VARVAL,TEMP,FRAG(200) CHARACTER(LEN=80) :: TSTRING CHARACTER(LEN=3) :: ERRSTRING CHARACTER(LEN=16) :: NUMCHARS INTEGER LENGTH,EQLOC,LVARVAL,DOTLOC INTEGER I,J,LOCEX,NP LOGICAL ONFRAG !==============================================================================! FRAG = " " NUMCHARS = "0123456789+-Ee. " VARTYPE = "error" LOGVAL = .FALSE. LENGTH = LEN_TRIM(TEXT_LINE) WRITE(ERRSTRING,"(I3)") LNUM LOCEX = INDEX(TEXT_LINE,"!") ! !-----------------------CHECK FOR BLANK LINE OR COMMENT------------------------! ! IF(LENGTH == 0 .OR. LOCEX==1)THEN VARTYPE = "no data" VARNAME = "no data" RETURN END IF ! !-----------------------CHANGE COMMAS TO BLANKS--------------------------------! ! DO I=1,LENGTH IF(TEXT_LINE(I:I) == ",") TEXT_LINE(I:I) = " " END DO ! !-----------------------REMOVING TRAILING COMMENTS-----------------------------! ! IF(LOCEX /= 0)THEN TEMP = TEXT_LINE(1:LOCEX-1) TEXT_LINE = TEMP END IF ! !--------------------ENSURE "=" EXISTS AND DETERMINE LOCATION------------------! ! EQLOC = INDEX(TEXT_LINE,"=") IF(EQLOC == 0) CALL PERROR(6,'DATA LINE '//ERRSTRING//' MUST CONTAIN "=" ') ! IF(EQLOC == 0) then ! CALL WARNING(& ! &'Could not find correct variable name in the datafile header',& ! &'Header comment lines must start with "!", Data lines must contain "="',& ! &'DATA LINE '//ERRSTRING//': This often occurs if the header variable is missing!') ! VARTYPE = "no data" ! VARNAME = "no data" ! RETURN ! END IF ! !--------------------SPLIT OFF VARNAME AND VARVAL STRINGS----------------------! ! VARNAME = TEXT_LINE(1:EQLOC-1) VARVAL = ADJUSTL(TEXT_LINE(EQLOC+1:LENGTH)) LVARVAL = LEN_TRIM(VARVAL) IF(LVARVAL == 0) CALL PERROR(6,'IN DATA PARAMETER FILE', & 'VARIABLE LINE'//ERRSTRING//' HAS NO ASSOCIATED VALUE') ! IF(LVARVAL == 0) then ! CALL WARNING('IN DATA PARAMETER FILE', & ! & 'VARIABLE'//VARNAME//'; LINE'//ERRSTRING//' HAS NO ASSOCIATED VALUE') ! VARTYPE = "no data" ! VARNAME = "no data" ! RETURN ! END IF !-----------------DETERMINE TYPE OF VARVAL-------------------------------------! ! ! ! CHECK FOR LOGICAL ! IF((VARVAL(1:1) == "T" .OR. VARVAL(1:1) == "F") .AND. LVARVAL == 1)THEN VARTYPE = "logical" IF(VARVAL(1:1) == "T") LOGVAL = .TRUE. RETURN END IF ! ! CHECK IF IT IS A STRING (CONTAINS CHARACTERS OTHER THAN 0-9,+,-,e,E,.) ! DO I=1,LVARVAL IF(INDEX(NUMCHARS,VARVAL(I:I)) == 0) VARTYPE = "string" END DO ! ! PROCESS STRING (MAY BE MULTIPLE) ! IF(VARTYPE == "string") THEN TSTRING = VARVAL STRINGVAL(1) = TSTRING NVAL = 1 ONFRAG = .TRUE. DO I=1,LVARVAL IF(VARVAL(I:I) /= " ")THEN FRAG(NVAL) = TRIM(FRAG(NVAL))//VARVAL(I:I) ONFRAG = .TRUE. ELSE IF(ONFRAG) NVAL = NVAL + 1 ONFRAG = .FALSE. END IF END DO DO I=1,NVAL STRINGVAL(I+1) = TRIM(FRAG(I)) END DO RETURN END IF ! ! CHECK IF IT IS A FLOAT ! DOTLOC = INDEX(VARVAL,".") IF(DOTLOC /= 0) THEN VARTYPE = "float" ELSE VARTYPE = "integer" END IF ! !-----------------FRAGMENT INTO STRINGS FOR MULTIPLE VALUES---------------------! ! NP = 1 ONFRAG = .TRUE. DO I=1,LVARVAL IF(VARVAL(I:I) /= " ")THEN FRAG(NP) = TRIM(FRAG(NP))//VARVAL(I:I) ONFRAG = .TRUE. ELSE IF(ONFRAG) NP = NP + 1 ONFRAG = .FALSE. END IF END DO ! !-----------------EXTRACT NUMBER(S) FROM CHARACTER STRINGS----------------------! ! NVAL = NP DO I=1,NP TEMP = TRIM(FRAG(I)) IF(VARTYPE == "float") THEN READ(TEMP,*)REALVAL(I) ELSE READ(TEMP,*)INTVAL(I) END IF END DO END SUBROUTINE GET_VALUE !==============================================================================| FUNCTION SCAN_FILE(FNAME,VNAME,ISCAL,FSCAL,IVEC,FVEC,CVEC,NSZE,CVAL,LVAL) !==============================================================================| ! Scan an Input File for a Variable | ! RETURN VALUE: | ! 0 = FILE FOUND, VARIABLE VALUE FOUND | ! -1 = FILE DOES NOT EXIST OR PERMISSIONS ARE INCORRECT | ! -2 = VARIABLE NOT FOUND OR IMPROPERLY SET | ! -3 = VARIABLE IS OF DIFFERENT TYPE, CHECK INPUT FILE | ! -4 = VECTOR PROVIDED BUT DATA IS SCALAR TYPE | ! -5 = NO DATATYPE DESIRED, EXITING | ! | ! REQUIRED INPUT: | ! FNAME = File Name | ! FSIZE = Length of Filename | ! | ! OPTIONAL (MUST PROVIDE ONE) | ! ISCAL = INTEGER SCALAR | ! FSCAL = FLOAT SCALAR | ! CVAL = CHARACTER VARIABLE | ! LVAL = LOGICAL VARIABLE | ! IVEC = INTEGER VECTOR ** | ! FVEC = FLOAT VECTOR ** | ! CVEC = STRING VECTOR ** (STRINGS OF LENGTH 80) | ! **NSZE = ARRAY SIZE (MUST BE PROVIDED WITH IVEC/FVEC) | ! | !==============================================================================| IMPLICIT NONE CHARACTER(LEN=*) :: FNAME,VNAME INTEGER, INTENT(INOUT), OPTIONAL :: ISCAL,IVEC(*) REAL(SPP),INTENT(INOUT), OPTIONAL :: FSCAL,FVEC(*) CHARACTER(LEN=80), OPTIONAL :: CVAL,CVEC(*) LOGICAL, INTENT(INOUT), OPTIONAL :: LVAL INTEGER, INTENT(INOUT), OPTIONAL :: NSZE !------------------------------------------------------------------------------| INTEGER :: SCAN_FILE REAL(SPP) REALVAL(150) INTEGER INTVAL(150) CHARACTER(LEN=20 ) :: VARNAME CHARACTER(LEN=80 ) :: STRINGVAL(150),TITLE CHARACTER(LEN=80 ) :: INPLINE CHARACTER(LEN=400) :: TLINE CHARACTER(LEN=7 ) :: VARTYPE CHARACTER(LEN=20 ), DIMENSION(200) :: SET INTEGER I,NVAL,J,NSET,NLINE,NREP LOGICAL SETYES,ALLSET,CHECK,LOGVAL INTEGER ioerror SCAN_FILE = 0 !==============================================================================| ! OPEN THE INPUT FILE | !==============================================================================| INQUIRE(FILE=TRIM(FNAME),EXIST=CHECK) IF(.NOT.CHECK)THEN SCAN_FILE = -1 RETURN END IF OPEN(10,FILE=TRIM(FNAME)) ; REWIND(10) !==============================================================================| ! SCAN THE FILE FOR THE VARIABLE NAME | !==============================================================================| NSET = 0 NLINE = 0 out: DO WHILE(.TRUE.) TLINE(1:LEN(TLINE)) = ' ' NREP = 0 NLINE = NLINE + 1 READ(10,'(a)',IOSTAT=ioerror) INPLINE IF(ioerror .ne. 0) EXIT out TLINE(1:80) = INPLINE(1:80) !----PROCESS LINE CONTINUATIONS------------------------------------------------! DO WHILE(.TRUE.) I = LEN_TRIM(INPLINE) IF(I /= 0)THEN # if defined (COMPAQ) || defined (INTEL) || defined (IRIX) IF( INPLINE(I-1:I) == '\\')THEN # else IF( INPLINE(I-1:I) == '\\\\')THEN # endif NREP = NREP + 1 READ(10,'(a)',IOSTAT=ioerror) INPLINE IF(ioerror .ne. 0) EXIT out NLINE = NLINE + 1 TLINE( NREP*80 + 1 : NREP*80 +80) = INPLINE(1:80) CYCLE END IF END IF EXIT ENDDO IF(NREP > 4)CALL PERROR(6,"CANNOT HAVE > 4 LINE CONTINUATIONS") !----REMOVE LINE CONTINUATION CHARACTER \\-------------------------------------! IF(NREP > 0)THEN DO I=2,LEN_TRIM(TLINE) # if defined (COMPAQ) || defined (INTEL) || defined (IRIX) IF( TLINE(I-1:I) == '\\') TLINE(I-1:I) = ' ' # else IF( TLINE(I-1:I) == '\\\\') TLINE(I-1:I) = ' ' # endif END DO END IF !----PROCESS THE LINE----------------------------------------------------------! CALL GET_VAL(NLINE,LEN_TRIM(TLINE),ADJUSTL(TLINE),VARNAME,VARTYPE,LOGVAL,& STRINGVAL,REALVAL,INTVAL,NVAL) !----IF VARNAME MATCHES, PROCESS VARIABLE AND ERROR-CHECK----------------------! IF(TRIM(VARNAME) == TRIM(VNAME))THEN IF(PRESENT(ISCAL))THEN IF(VARTYPE == 'integer')THEN ISCAL = INTVAL(1) RETURN ELSE SCAN_FILE = -3 END IF ELSE IF(PRESENT(FSCAL))THEN IF(VARTYPE == 'float')THEN FSCAL = REALVAL(1) RETURN ELSE SCAN_FILE = -3 END IF ELSE IF(PRESENT(CVAL))THEN IF(VARTYPE == 'string')THEN CVAL = STRINGVAL(1) RETURN ELSE SCAN_FILE = -3 END IF ELSE IF(PRESENT(LVAL))THEN IF(VARTYPE == 'logical')THEN LVAL = LOGVAL RETURN ELSE SCAN_FILE = -3 END IF ELSE IF(PRESENT(IVEC))THEN IF(NVAL > 1)THEN IF(VARTYPE == 'integer')THEN IVEC(1:NVAL) = INTVAL(1:NVAL) NSZE = NVAL RETURN ELSE SCAN_FILE = -3 END IF ELSE SCAN_FILE = -4 END IF ELSE IF(PRESENT(FVEC))THEN IF(NVAL > 1)THEN IF(VARTYPE == 'float')THEN FVEC(1:NVAL) = REALVAL(1:NVAL) NSZE = NVAL RETURN ELSE SCAN_FILE = -3 END IF ELSE SCAN_FILE = -4 END IF ELSE IF(PRESENT(CVEC))THEN IF(NVAL > 0)THEN IF(VARTYPE == 'string')THEN CVEC(1:NVAL) = STRINGVAL(2:NVAL+1) NSZE = NVAL RETURN ELSE SCAN_FILE = -3 END IF ELSE SCAN_FILE = -4 END IF ELSE SCAN_FILE = -5 END IF END IF !!VARIABLE IS CORRECT END DO !!LOOP OVER INPUT FILE !LOOP out CLOSE(10) SCAN_FILE = -2 RETURN END FUNCTION SCAN_FILE !==============================================================================| FUNCTION SCAN_FILE2(FNAME,VNAME,ISCAL,FSCAL,IVEC,FVEC,CVEC,NSZE,CVAL,LVAL) !==============================================================================| ! Scan an Input File for a Variable | ! RETURN VALUE: | ! 0 = FILE FOUND, VARIABLE VALUE FOUND | ! -1 = FILE DOES NOT EXIST OR PERMISSIONS ARE INCORRECT | ! -2 = VARIABLE NOT FOUND OR IMPROPERLY SET | ! -3 = VARIABLE IS OF DIFFERENT TYPE, CHECK INPUT FILE | ! -4 = VECTOR PROVIDED BUT DATA IS SCALAR TYPE | ! -5 = NO DATATYPE DESIRED, EXITING | ! | ! REQUIRED INPUT: | ! FNAME = File Name | ! FSIZE = Length of Filename | ! | ! OPTIONAL (MUST PROVIDE ONE) | ! ISCAL = INTEGER SCALAR | ! FSCAL = FLOAT SCALAR | ! CVAL = CHARACTER VARIABLE | ! LVAL = LOGICAL VARIABLE | ! IVEC = INTEGER VECTOR ** | ! FVEC = FLOAT VECTOR ** | ! CVEC = STRING VECTOR ** (STRINGS OF LENGTH 80) | ! **NSZE = ARRAY SIZE (MUST BE PROVIDED WITH IVEC/FVEC) | ! | !==============================================================================| IMPLICIT NONE CHARACTER(LEN=*) :: FNAME,VNAME INTEGER, INTENT(INOUT), OPTIONAL :: ISCAL,IVEC(*) REAL(SPP),INTENT(INOUT), OPTIONAL :: FSCAL,FVEC(*) CHARACTER(LEN=80), OPTIONAL :: CVAL,CVEC(*) LOGICAL, INTENT(INOUT), OPTIONAL :: LVAL INTEGER, INTENT(INOUT), OPTIONAL :: NSZE !------------------------------------------------------------------------------| INTEGER :: SCAN_FILE2 REAL(DPP) REALVAL(150) INTEGER INTVAL(150) CHARACTER(LEN=40 ) :: VARNAME CHARACTER(LEN=80 ) :: STRINGVAL(150),TITLE CHARACTER(LEN=80 ) :: INPLINE CHARACTER(LEN=400) :: TLINE CHARACTER(LEN=7 ) :: VARTYPE CHARACTER(LEN=20 ), DIMENSION(200) :: SET INTEGER I,NVAL,J,NSET,NLINE,NREP LOGICAL SETYES,ALLSET,CHECK,LOGVAL INTEGER ioerror SCAN_FILE2 = 0 !==============================================================================| ! OPEN THE INPUT FILE | !==============================================================================| INQUIRE(FILE=TRIM(FNAME),EXIST=CHECK) IF(.NOT.CHECK)THEN SCAN_FILE2 = -1 RETURN END IF OPEN(10,FILE=TRIM(FNAME)) ; REWIND(10) !==============================================================================| ! SCAN THE FILE FOR THE VARIABLE NAME | !==============================================================================| NSET = 0 NLINE = 0 out: DO WHILE(.TRUE.) TLINE(1:LEN(TLINE)) = ' ' NREP = 0 NLINE = NLINE + 1 READ(10,'(a)',IOSTAT=ioerror) INPLINE IF(ioerror .ne. 0) EXIT out TLINE(1:80) = INPLINE(1:80) !----PROCESS LINE CONTINUATIONS------------------------------------------------! DO WHILE(.TRUE.) I = LEN_TRIM(INPLINE) IF(I > 2)THEN # if defined (COMPAQ) || defined (INTEL) || defined (IRIX) IF( INPLINE(I-1:I) == '\\')THEN # else IF( INPLINE(I-1:I) == '\\')THEN # endif NREP = NREP + 1 READ(10,'(a)',IOSTAT=ioerror) INPLINE IF(ioerror .ne. 0) EXIT out NLINE = NLINE + 1 TLINE( NREP*80 + 1 : NREP*80 +80) = INPLINE(1:80) CYCLE END IF END IF EXIT ENDDO IF(NREP > 4)CALL PERROR(6,"CANNOT HAVE > 4 LINE CONTINUATIONS") !IF(NREP > 4)CALL Fatal_Error("CANNOT HAVE > 4 LINE CONTINUATIONS") !----REMOVE LINE CONTINUATION CHARACTER \\-------------------------------------! IF(NREP > 0)THEN DO I=2,LEN_TRIM(TLINE) # if defined (COMPAQ) || defined (INTEL) || defined (IRIX) IF( TLINE(I-1:I) == '\\') TLINE(I-1:I) = ' ' # else IF( TLINE(I-1:I) == '\\') TLINE(I-1:I) = ' ' # endif END DO END IF !----PROCESS THE LINE----------------------------------------------------------! CALL GET_VALUE(NLINE,LEN_TRIM(TLINE),ADJUSTL(TLINE),VARNAME,VARTYPE,LOGVAL,& STRINGVAL,REALVAL,INTVAL,NVAL) !----IF VARNAME MATCHES, PROCESS VARIABLE AND ERROR-CHECK----------------------! IF(TRIM(VARNAME) == TRIM(VNAME))THEN IF(PRESENT(ISCAL))THEN IF(VARTYPE == 'integer')THEN ISCAL = INTVAL(1) CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(FSCAL))THEN IF(VARTYPE == 'float')THEN FSCAL = REALVAL(1) CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(CVAL))THEN IF(VARTYPE == 'string')THEN CVAL = STRINGVAL(1) CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(LVAL))THEN IF(VARTYPE == 'logical')THEN LVAL = LOGVAL CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(IVEC))THEN IF(VARTYPE == 'integer')THEN IVEC(1:NVAL) = INTVAL(1:NVAL) NSZE = NVAL CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(FVEC))THEN IF(VARTYPE == 'float')THEN FVEC(1:NVAL) = REALVAL(1:NVAL) NSZE = NVAL CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE IF(PRESENT(CVEC))THEN IF(VARTYPE == 'string')THEN CVEC(1:NVAL) = STRINGVAL(2:NVAL+1) NSZE = NVAL CLOSE(10) RETURN ELSE SCAN_FILE2 = -3 END IF ELSE SCAN_FILE2 = -5 END IF END IF !!VARIABLE IS CORRECT END DO !!LOOP OVER INPUT FILE 20 CLOSE(10) SCAN_FILE2 = -2 RETURN END FUNCTION SCAN_FILE2 !==============================================================================| END MODULE MOD_BIOINP