The TELEMAC-MASCARET system  trunk
sortie.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE sortie
3 ! *****************
4 !
5  &( chaine , mnemo , nbre , sorleo )
6 !
7 !***********************************************************************
8 ! BIEF V7P3 29/08/2018
9 !***********************************************************************
10 !
11 !brief SETS VARIABLES SORLEO AND SORIMP.
12 !
13 !history J-M HERVOUET (LNHE)
14 !+ 03/11/2009
15 !+ V6P0
16 !+ JOKER '*' ALLOWED IN NAMES
17 !
18 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
19 !+ 13/07/2010
20 !+ V6P0
21 !+ Translation of French comments within the FORTRAN sources into
22 !+ English comments
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 21/08/2010
26 !+ V6P0
27 !+ Creation of DOXYGEN tags for automated documentation and
28 !+ cross-referencing of the FORTRAN sources
29 !
30 !history S.E.BOURBAN (HRW)
31 !+ 11/11/2016
32 !+ V7P2
33 !+ The * symbol now only represent a number, such as T* for all
34 !+ tracers (T1, T2, ... T10, T11, etc.) but not for TAU_S and others
35 !+ Note that G* will not pick up G, but only G1, G2, etc.
36 !
37 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 !| CHAINE |<->| STRING OF VARIABLES FOR GRAPHIC OUTPUTS
39 !| MNEMO |<->| MNEMO OF VARIABLES
40 !| NBRE |-->| NUMBER OF VARIABLES
41 !| SORLEO |<->| LOGICAL ARRAY
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !
45  IMPLICIT NONE
46 !
47 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 !
49  INTEGER, INTENT(IN) :: NBRE
50 !
51  CHARACTER(LEN=*), INTENT(INOUT) :: CHAINE
52  CHARACTER(LEN=8), INTENT(IN) :: MNEMO(nbre)
53 !
54  LOGICAL, INTENT(INOUT) :: SORLEO(nbre)
55 !
56 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 !
58 ! INTERNAL VARIABLES:
59 !
60  CHARACTER C(2)
61  CHARACTER(LEN=8) MOT(100)
62  CHARACTER(LEN=10) :: KS
63  CHARACTER(LEN=26) :: KL
64  INTEGER I,J,LONG,I1,I2,NMOT,L,KI
65  LOGICAL OK,FOUND
66 !
67  INTRINSIC len
68 !
69 !-----------------------------------------------------------------------
70 !
71  parameter( ks = '0123456789' )
72  parameter( kl = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' )
73 !
74 !-----------------------------------------------------------------------
75 !
76 ! RECOGNISED SEPARATORS IN 'CHAINE'
77 !
78  DO i=1,100
79  mot(i) = ' '
80  ENDDO
81  c(1) = ','
82  c(2) = ';'
83  long = len(chaine)
84  IF (long.EQ.0) THEN
85  IF(lng.EQ.1) WRITE(lu,1002)
86  IF(lng.EQ.2) WRITE(lu,1003)
87 1002 FORMAT(1x,'SORTIE (BIEF) : CHAINE VIDE')
88 1003 FORMAT(1x,'SORTIE (BIEF): EMPTY STRING')
89  CALL plante(1)
90  stop
91  ENDIF
92 !
93  DO i=1,long
94  DO j=1,2
95  IF(chaine(i:i).EQ.c(j)) chaine(i:i) = ' '
96  ENDDO
97  ENDDO
98 !
99 ! 'CHAINE' NOW IS MADE UP OF WORDS SEPARATED BY WHITE SPACES
100 !
101  i1 = 0
102  nmot=0
103 !
104  10 CONTINUE
105  IF (i1.GE.long) GOTO 30
106  i1=i1+1
107  IF (chaine(i1:i1).EQ.' ') GOTO 10
108 !
109  i2=0
110 !
111  20 CONTINUE
112  i2=i2+1
113  IF (chaine(i1+i2:i1+i2).NE.' ') GOTO 20
114 !
115  nmot=nmot+1
116  IF (i2.GT.8) THEN
117  IF(lng.EQ.1) WRITE(lu,1004) chaine
118  IF(lng.EQ.2) WRITE(lu,1005) chaine
119 1004 FORMAT(1x,'SORTIE (BIEF) : PLUS DE 8 CARACTERES PAR MOT',/,1x,
120  & ' DANS LA CHAINE :',a)
121 1005 FORMAT(1x,'SORTIE (BIEF): MORE THAN 8 LETTERS PER WORD',/,1x,
122  & ' IN THE CHAIN: ',a)
123  CALL plante(1)
124  stop
125  ENDIF
126  mot(nmot)=chaine(i1:i1+i2)
127  i1=i1+i2
128  GOTO 10
129 !
130 30 CONTINUE
131 !
132 ! COMPARES 'MOT' AND 'MNEMO'
133 !
134  DO i=1,nbre
135  DO j=1,nmot
136  ok=.true.
137  DO l=1,8
138  IF( mot(j)(l:l).NE.mnemo(i)(l:l) ) THEN
139 ! A JOKER '*' IS ALLOWED BUT ONLY TO REPLACE A NUMBER
140  IF( mot(j)(l:l).EQ.'*'.AND.mnemo(i)(l:l).NE.' ' ) THEN
141  found = .false.
142  DO ki = 1,10
143  IF( mnemo(i)(l:l).EQ.ks(ki:ki) ) THEN
144 ! CHECK ON THE NEXT CHARACTER TO AVOID
145 ! SORLEO.EQ.TRUE FOR ALL VARIABLES STARTING WITH '*'
146  IF(mnemo(i)(l+1:l+1).EQ.mot(j)(l+1:l+1).OR.
147  & mnemo(i)(l+2:l+2).EQ.mot(j)(l+1:l+1)) THEN
148  found = .true.
149  ENDIF
150  ENDIF
151  ENDDO
152  IF( found ) EXIT
153 ! A TILDA '~' IS ALLOWED BUT ONLY TO REPLACE CHARACTERS
154  ELSEIF( mot(j)(l:l).EQ.'~'.AND.mnemo(i)(l:l).NE.' ' ) THEN
155  found = .false.
156  DO ki = 1,26
157  IF( mnemo(i)(l:l).EQ.kl(ki:ki) ) found = .true.
158  ENDDO
159  IF( found ) EXIT
160  ENDIF
161  ok=.false.
162  EXIT
163  ENDIF
164  IF( mot(j)(l:l).EQ.' '.AND.mnemo(i)(l:l).EQ.' ') EXIT
165  ENDDO
166  sorleo(i)=ok
167  IF(sorleo(i)) EXIT
168  ENDDO
169  ENDDO
170 !
171 !-----------------------------------------------------------------------
172 !
173  RETURN
174  END
subroutine sortie(CHAINE, MNEMO, NBRE, SORLEO)
Definition: sortie.f:7