Statistiques
| Révision :

root / src / valid.f90 @ 2

Historique | Voir | Annoter | Télécharger (3,79 ko)

1 1 equemene
! This function returns true or false depending on the string you give as a parameter
2 1 equemene
! Its purpose is to centralize the debugging flags into only one external file
3 1 equemene
! so that debugging can be turned on or off easily at runtime.
4 1 equemene
! (basically as it was done in ADF...
5 1 equemene
! except that my version is much more basic (much much much more !) )
6 1 equemene
7 1 equemene
      function valid(string) result (isValid)
8 1 equemene
9 1 equemene
      use Io_module
10 1 equemene
11 1 equemene
      IMPLICIT NONE
12 1 equemene
13 1 equemene
      interface
14 1 equemene
         subroutine upcase(string)
15 1 equemene
           character(*), intent(inout) :: string
16 1 equemene
         end subroutine upcase
17 1 equemene
      end interface
18 1 equemene
19 1 equemene
      CHARACTER(*), intent(in) :: string
20 1 equemene
      logical                  :: isValid
21 1 equemene
      INTEGER(4), PARAMETER :: NMax=500
22 1 equemene
23 1 equemene
      CHARACTER(64),save :: List(NMax)
24 1 equemene
      LOGICAL,save       :: Value(NMax)
25 1 equemene
      LOGICAL,save       :: TInit=.False.
26 1 equemene
      CHARACTER(132) :: LINE, ValTMP, LString
27 1 equemene
      LOGICAL       :: ValueTMP, Found
28 1 equemene
      LOGICAL,SAVE       :: Tall=.False., FValidFile, ValAll
29 1 equemene
      INTEGER(4) :: ios, i,j,k
30 1 equemene
      INTEGER(4), SAVE ::  NEntries
31 1 equemene
32 1 equemene
      IF (.not.TInit) THEN
33 1 equemene
         NEntries=0
34 1 equemene
         TInit=.TRUE.
35 1 equemene
         INQUIRE(FILE=DebugFile,EXIST=FValidFile)
36 1 equemene
         if (FValidFile) THEN
37 1 equemene
            OPEN(IOTMP,File=DebugFile,IOSTAT=ios)
38 1 equemene
39 1 equemene
! The file exists so we will read it !
40 1 equemene
            DO While (ios==0)
41 1 equemene
               READ(IOTMP,'(A)',ERR=999,END=999) LINE
42 1 equemene
!               WRITE(*,*) 'LINE READ',trim(Line)
43 1 equemene
               if (ios==0) THEN
44 1 equemene
                  Line=AdjustL(Line)
45 1 equemene
!               WRITE(*,*) 'LINE ADJ',trim(Line)
46 1 equemene
                  call Upcase(Line)
47 1 equemene
!               WRITE(*,*) 'LINE UP',trim(Line)
48 1 equemene
                  if (Line(1:1)/='#') THEN
49 1 equemene
! This is not a comment, we go on
50 1 equemene
                     i=index(Line,' ')
51 1 equemene
! We take the first word, it will be our value
52 1 equemene
                     ValTMP=Line(1:i-1)
53 1 equemene
                     j=len_trim(line)
54 1 equemene
                     Line=adjustL((Line(i+1:j)))
55 1 equemene
!                     WRITE(*,*) 'VALID INIT ',NEntries,trim(ValTMP),
56 1 equemene
!     &   ' - ',trim(Line)
57 1 equemene
                     if (ValTMP(1:1)=='.') ValTmp=ValTMP(2:)
58 1 equemene
                     if (ValTMP(1:1)=='F') ValueTMP=.False.
59 1 equemene
                     if (ValTMP(1:1)=='T') ValueTMP=.True.
60 1 equemene
                     if (Line(1:1)=='*') THEN
61 1 equemene
                        ValAll=ValueTMP
62 1 equemene
                        TAll=.True.
63 1 equemene
                     ELSE
64 1 equemene
                        if (Tall) ValueTMP=ValAll
65 1 equemene
                        NEntries=NEntries+1
66 1 equemene
                        Value(NEntries)=ValueTMP
67 1 equemene
                        Line=AdjustL(Line)
68 1 equemene
                        List(NEntries)=Line(1:64)
69 1 equemene
                     END IF
70 1 equemene
                  END IF
71 1 equemene
               END IF
72 1 equemene
            END DO
73 1 equemene
 999     CONTINUE
74 1 equemene
         CLOSE(IOTMP)
75 1 equemene
!         WRITE(*,*) "DBG Valid, " // Trim(DebugFile) // "read, with "
76 1 equemene
!    &    ,NEntries
77 1 equemene
!         DO I=1,NEntries
78 1 equemene
!            WRITE(*,*) List(I),Value(I)
79 1 equemene
!         END DO
80 1 equemene
       END IF
81 1 equemene
      END IF
82 1 equemene
83 1 equemene
      IF (.NOT.FValidFile) THEN
84 1 equemene
         isValid=.FALSE.
85 1 equemene
         Return
86 1 equemene
      END IF
87 1 equemene
88 1 equemene
! The INIT file has been read !
89 1 equemene
      LString=trim(adjustL(String))
90 1 equemene
      Call UPcase(LString)
91 1 equemene
      Found=.false.
92 1 equemene
      Do I=1,NEntries
93 1 equemene
         if (trim(List(I)).eq.trim(LString)) THEN
94 1 equemene
            Found=.TRUE.
95 1 equemene
            isValid=Value(I)
96 1 equemene
!            WRITE(*,*) 'zoeurezoiru'
97 1 equemene
         END IF
98 1 equemene
!         WRITE(*,*) I,' : ',trim(list(I)),' - ',trim(LSTRING),' *'
99 1 equemene
      END DO
100 1 equemene
101 1 equemene
!      WRITE(*,*) 'Found:',Found,'isval',isvalid
102 1 equemene
!      WRITE(*,*) 'Debug is ',isvalid," for ",Trim(LString)
103 1 equemene
104 1 equemene
      if (.NOT.Found) THEN
105 1 equemene
         IF (Tall) THEN
106 1 equemene
            WRITE(*,*) 'The option ',String, &
107 1 equemene
                 ' is not recognized'
108 1 equemene
            WRITE(*,*) 'Assigning value ',ValAll
109 1 equemene
            isValid=ValAll
110 1 equemene
         ELSE
111 1 equemene
            isValid=.FALSE.
112 1 equemene
         END IF
113 1 equemene
         NEntries=Nentries+1
114 1 equemene
         List(Nentries)=Trim(LString)
115 1 equemene
         Value(Nentries)=Valall
116 1 equemene
      END IF
117 1 equemene
118 1 equemene
      END function valid