The TELEMAC-MASCARET system  trunk
check_sortgai.f
Go to the documentation of this file.
1 ! ************************
2  SUBROUTINE check_sortgai
3 ! ************************
4 !
5  &( chaine , nbre , chainehyd, ind_sed, yes2d, grap_print2d)
6 !
7 !***********************************************************************
8 ! BIEF
9 !***********************************************************************
10 !
11 !brief ADDS CORRESPONDIG GRAPHICAL PRINTOUT IN SORT3D/SORT2D/VARDES
12 ! FOR VARIABLES LIKE CS,SVX,SVY,SVZ,2DCS WHICH ARE ASKED IN THE
13 ! GAIA STEERING FILE AS GRAPHICAL PRINTOUT
14 ! (COPY-PASTE OF BEGINNING OF SUBROUTINE SORTIE)
15 !
16 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 !| CHAINE |<->| STRING OF VARIABLES FOR GAIA GRAPHIC OUTPUTS
18 !| CHAINEHYD |<->| STRING OF VARIABLES FOR HYDRO GRAPHIC OUTPUTS
19 !| IND_SED |-->| RANK OF SEDIMENTS IN TRACERS
20 !| NBRE |-->| NUMBER OF VARIABLES
21 !| YES2D |-->| LOGICAL TO CHECK IF T2D OR T3D
22 !| GRAP_PRINT2D |-->| LOGICAL TO CHECK IF SORT2D OR SORT3D
23 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 !
26  IMPLICIT NONE
27 !
28 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29 !
30  INTEGER, INTENT(IN) :: NBRE
31  INTEGER, INTENT(IN) :: IND_SED
32  LOGICAL, INTENT(IN) :: YES2D
33  LOGICAL, INTENT(IN), OPTIONAL :: GRAP_PRINT2D
34 !
35  CHARACTER(LEN=72), INTENT(INOUT) :: CHAINE
36  CHARACTER(LEN=72), INTENT(INOUT) :: CHAINEHYD
37 !
38 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 !
40 ! INTERNAL VARIABLES:
41 !
42  CHARACTER C(2)
43  CHARACTER(LEN=8) MOT(100)
44  CHARACTER(LEN=2) :: TOBER
45  CHARACTER(4) :: MYSTRING
46  INTEGER I,J,LONG,I1,I2,NMOT,L,KI,NUMS,NUMS_TO_NUMTR,LONG2,LONG3
47 !
48  INTRINSIC len
49  LOGICAL LGRAP_PRINT2D
50 !
51 !-----------------------------------------------------------------------
52 !
53  IF(PRESENT(grap_print2d)) THEN
54  lgrap_print2d = grap_print2d
55  ELSE
56  lgrap_print2d = .false.
57  ENDIF
58 
59  long2 = 0
60 !
61 ! 1) COUNTING HOW MANY CHARACTERS IN CHAINEHYD
62 ! RECOGNISED SEPARATORS IN 'CHAINEHYD'
63 !
64  DO i=1,100
65  mot(i) = ' '
66  ENDDO
67  c(1) = ','
68  c(2) = ';'
69  long = len(chainehyd)
70  IF (long.EQ.0) THEN
71  IF(lng.EQ.1) WRITE(lu,1002)
72  IF(lng.EQ.2) WRITE(lu,1003)
73  CALL plante(1)
74  stop
75  ENDIF
76 !
77  DO i=1,long
78  DO j=1,2
79  IF(chainehyd(i:i).EQ.c(j)) THEN
80  chainehyd(i:i) = ' '
81 ! COUNTING NUMBER OF SEPARATORS
82  long2=long2+1
83  ENDIF
84  ENDDO
85  ENDDO
86 !
87 ! 'CHAINEHYD' NOW IS MADE UP OF WORDS SEPARATED BY WHITE SPACES
88 !
89  i1 = 0
90  nmot=0
91 !
92  10 CONTINUE
93  IF (i1.GE.long) GOTO 30
94  i1=i1+1
95  IF (chainehyd(i1:i1).EQ.' ') GOTO 10
96 !
97  i2=0
98 !
99  20 CONTINUE
100  i2=i2+1
101  IF (chainehyd(i1+i2:i1+i2).NE.' ') GOTO 20
102 !
103  nmot=nmot+1
104  IF (i2.GT.8) THEN
105  IF(lng.EQ.1) WRITE(lu,1004) chainehyd
106  IF(lng.EQ.2) WRITE(lu,1005) chainehyd
107  CALL plante(1)
108  stop
109  ENDIF
110 ! ADDING NUMBER OF CHARACTERS OF GRAPH OUTPUTS TO THE NUMBER
111 ! OF SEPARATORS IN ORDER TO KNOW THE TOTAL LENGTH
112  long2=long2+i2
113  mot(nmot)=chainehyd(i1:i1+i2)
114  i1=i1+i2
115  GOTO 10
116 !
117 30 CONTINUE
118 !
119 ! 2)LOOKING FOR CS OR SVX,SVY,SVZ IN CHAINEGAIA
120 ! RECOGNISED SEPARATORS IN 'CHAINE'
121 !
122  DO i=1,100
123  mot(i) = ' '
124  ENDDO
125  long = len(chaine)
126  IF (long.EQ.0) THEN
127  IF(lng.EQ.1) WRITE(lu,1002)
128  IF(lng.EQ.2) WRITE(lu,1003)
129  CALL plante(1)
130  stop
131  ENDIF
132 !
133  DO i=1,long
134  DO j=1,2
135  IF(chaine(i:i).EQ.c(j)) chaine(i:i) = ' '
136  ENDDO
137  ENDDO
138 !
139 ! 'CHAINE' NOW IS MADE UP OF WORDS SEPARATED BY WHITE SPACES
140 !
141  i1 = 0
142  nmot=0
143 !
144  40 CONTINUE
145  IF (i1.GE.long) GOTO 60
146  i1=i1+1
147  IF (chaine(i1:i1).EQ.' ') GOTO 40
148 !
149  i2=0
150 !
151  50 CONTINUE
152  i2=i2+1
153  IF (chaine(i1+i2:i1+i2).NE.' ') GOTO 50
154 !
155  nmot=nmot+1
156  IF (i2.GT.8) THEN
157  IF(lng.EQ.1) WRITE(lu,1004) chaine
158  IF(lng.EQ.2) WRITE(lu,1005) chaine
159  CALL plante(1)
160  stop
161  ENDIF
162  mot(nmot)=chaine(i1:i1+i2)
163  i1=i1+i2
164  GOTO 40
165 !
166 60 CONTINUE
167 ! LONG2: LENGTH OF ORIGINAL STRING FOR GR OUTPUT
168 ! LONG3: WILL BE THE LENGTH OF THE NEW STRING FOR GR OUTPUT
169  long3=long2
170 !
171  IF(yes2d)THEN
172 ! TELEMAC2D CASE
173  DO j=1,nmot
174  l=1
175  IF( mot(j)(l:l+1).EQ.'CS' ) THEN
176 ! CHECK THE THIRD CHARACTER
177  IF( mot(j)(l+2:l+2).EQ.'*' ) THEN
178  chainehyd(long3+1:long3+3)=' T*'
179  long3=long3+3
180  ELSE
181 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
182  tober=mot(j)(l+2:l+3)
183  READ(tober,*) nums
184  IF(ind_sed.EQ.1) THEN
185  nums_to_numtr=nums
186  ELSE
187  nums_to_numtr=nums+ind_sed
188  ENDIF
189 ! FROM INTEGER TO STRING
190  WRITE(mystring,'(i4)') nums_to_numtr
191  chainehyd(long3+1:long3+2)=' T'
192 !
193  chainehyd(long3+3:long3+3+(len(adjustl(mystring))-1))=
194  & adjustl(mystring)
195 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
196  long3=long3+4
197  ENDIF
198  ENDIF
199  ENDDO
200 !
201  ELSE
202 !
203 ! TELEMAC3D CASE
204 !
205  IF(.NOT.lgrap_print2d) THEN
206 ! CASE OF 3D GRAPHIC PRINTOUT
207  DO j=1,nmot
208  l=1
209  IF( mot(j)(l:l+1).EQ.'CS' ) THEN
210 ! CHECK THE THIRD CHARACTER
211  IF( mot(j)(l+2:l+2).EQ.'*' ) THEN
212  chainehyd(long3+1:long3+4)=' TA*'
213  long3=long3+4
214  ELSE
215 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
216  tober=mot(j)(l+2:l+3)
217  READ(tober,*) nums
218  IF(ind_sed.EQ.1) THEN
219  nums_to_numtr=nums
220  ELSE
221  nums_to_numtr=nums+ind_sed
222  ENDIF
223 ! FROM INTEGER TO STRING
224  WRITE(mystring,'(i4)') nums_to_numtr
225  chainehyd(long3+1:long3+3)=' TA'
226 !
227  chainehyd(long3+4:long3+4+(len(adjustl(mystring))-1))=
228  & adjustl(mystring)
229 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
230  long3=long3+5
231  ENDIF
232  ELSEIF( mot(j)(l:l+2).EQ.'SVX' ) THEN
233 ! CHECK THE FOURTH CHARACTER
234  IF( mot(j)(l+3:l+3).EQ.'*' ) THEN
235  chainehyd(long3+1:long3+5)=' NAX*'
236  long3=long3+5
237  ELSE
238 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
239  tober=mot(j)(l+3:l+4)
240  READ(tober,*) nums
241 ! DISTINCTION BETWEEN CASE WHERE THERE ARE ONLY SEDIMENTS
242 ! AND CASE WHERE THERE ARE TRACERS+SEDIMENTS
243  IF(ind_sed.EQ.1) THEN
244  nums_to_numtr=nums
245  ELSE
246  nums_to_numtr=nums+ind_sed
247  ENDIF
248 ! FROM INTEGER TO STRING
249  WRITE(mystring,'(i4)') nums_to_numtr
250  chainehyd(long3+1:long3+4)=' NAX'
251 !
252  chainehyd(long3+5:long3+5+(len(adjustl(mystring))-1))=
253  & adjustl(mystring)
254 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
255  long3=long3+6
256  ENDIF
257  ELSEIF( mot(j)(l:l+2).EQ.'SVY' ) THEN
258 ! CHECK THE FOURTH CHARACTER
259  IF( mot(j)(l+3:l+3).EQ.'*' ) THEN
260  chainehyd(long3+1:long3+5)=' NAY*'
261  long3=long3+5
262  ELSE
263 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
264  tober=mot(j)(l+3:l+4)
265  READ(tober,*) nums
266 ! DISTINCTION BETWEEN CASE WHERE THERE ARE ONLY SEDIMENTS
267 ! AND CASE WHERE THERE ARE TRACERS+SEDIMENTS
268  IF(ind_sed.EQ.1) THEN
269  nums_to_numtr=nums
270  ELSE
271  nums_to_numtr=nums+ind_sed
272  ENDIF
273 ! FROM INTEGER TO STRING
274  WRITE(mystring,'(i4)') nums_to_numtr
275  chainehyd(long3+1:long3+4)=' NAY'
276 !
277  chainehyd(long3+5:long3+5+(len(adjustl(mystring))-1))=
278  & adjustl(mystring)
279 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
280  long3=long3+6
281  ENDIF
282  ELSEIF( mot(j)(l:l+2).EQ.'SVZ' ) THEN
283 ! CHECK THE FOURTH CHARACTER
284  IF( mot(j)(l+3:l+3).EQ.'*' ) THEN
285  chainehyd(long3+1:long3+5)=' NAZ*'
286  long3=long3+5
287  ELSE
288 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
289  tober=mot(j)(l+3:l+4)
290  READ(tober,*) nums
291 ! DISTINCTION BETWEEN CASE WHERE THERE ARE ONLY SEDIMENTS
292 ! AND CASE WHERE THERE ARE TRACERS+SEDIMENTS
293  IF(ind_sed.EQ.1) THEN
294  nums_to_numtr=nums
295  ELSE
296  nums_to_numtr=nums+ind_sed
297  ENDIF
298 ! FROM INTEGER TO STRING
299  WRITE(mystring,'(i4)') nums_to_numtr
300  chainehyd(long3+1:long3+4)=' NAZ'
301 !
302  chainehyd(long3+5:long3+5+(len(adjustl(mystring))-1))=
303  & adjustl(mystring)
304 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
305  long3=long3+6
306  ENDIF
307  ENDIF
308  ENDDO
309  ELSE
310 ! CASE OF 2D GRAPHIC PRINTOUT
311  DO j=1,nmot
312  l=1
313  IF( mot(j)(l:l+3).EQ.'C2DS' ) THEN
314 ! CHECK THE FIFTH CHARACTER
315  IF( mot(j)(l+4:l+4).EQ.'*' ) THEN
316  chainehyd(long3+1:long3+4)=' TA*'
317  long3=long3+4
318  ELSE
319 ! NUMBER OF SEDIMENT FOR WHICH GR OUTPUT IS ASKED
320  tober=mot(j)(l+4:l+5)
321  READ(tober,*) nums
322  IF(ind_sed.EQ.1) THEN
323  nums_to_numtr=nums
324  ELSE
325  nums_to_numtr=nums+ind_sed
326  ENDIF
327 ! FROM INTEGER TO STRING
328  WRITE(mystring,'(i4)') nums_to_numtr
329  chainehyd(long3+1:long3+3)=' TA'
330 !
331  chainehyd(long3+4:long3+4+(len(adjustl(mystring))-1))=
332  & adjustl(mystring)
333 ! INCREMENT OF LENGTH OF STRING FOR GR OUTPUT
334  long3=long3+5
335  ENDIF
336  ENDIF
337  ENDDO
338  ENDIF
339  ENDIF
340 !
341 !
342 1002 FORMAT(1x,'SORTIE (BIEF) : CHAINEHYD VIDE')
343 1003 FORMAT(1x,'SORTIE (BIEF): EMPTY STRING')
344 1004 FORMAT(1x,'SORTIE (BIEF) : PLUS DE 8 CARACTERES PAR MOT',/,1x,
345  & ' DANS LA CHAINE :',a)
346 1005 FORMAT(1x,'SORTIE (BIEF): MORE THAN 8 LETTERS PER WORD',/,1x,
347  & ' IN THE CHAIN: ',a)
348 !----------------------------------------------------------------
349 !
350  RETURN
351  END
352 
353 
subroutine check_sortgai(CHAINE, NBRE, CHAINEHYD, IND_SED, YES2D, GRAP_PRINT2D)
Definition: check_sortgai.f:7