The TELEMAC-MASCARET system  trunk
lecdon_waqtel.f
Go to the documentation of this file.
1 ! ************************
2  SUBROUTINE lecdon_waqtel
3 ! ************************
4 !
5  & (file_desc,path,ncar,cas_file,dico_file)
6 !
7 !***********************************************************************
8 ! WAQTEL V8P2
9 !***********************************************************************
10 !
11 !brief READS THE STEERING FILE THROUGH A DAMOCLES CALL.
12 !
13 !history RIADH ATA (EDF R&D LNHE)
14 !+ 07/21/2014
15 !+ V7P0
16 !+
17 !
18 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19 !| FILE_DESC |-->| STORES THE FILES 'SUBMIT' ATTRIBUTES
20 !| | | IN DICTIONARIES. IT IS FILLED BY DAMOCLES.
21 !| NCAR |-->| LENGTH OF PATH
22 !| PATH |-->| NAME OF CURRENT DIRECTORY
23 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 !
25  USE bief
29 !
30  IMPLICIT NONE
31 !
32 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33 ! ARGUMENTS
34  CHARACTER(LEN=PATH_LEN), INTENT(INOUT) :: FILE_DESC(4,maxkeyword)
35  INTEGER, INTENT(IN) :: NCAR
36  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: PATH
37 ! API
38  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: DICO_FILE
39  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: CAS_FILE
40 !
41 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
42 !
43 !
44 !-----------------------------------------------------------------------
45 !
46  INTEGER K,I
47 !
48  CHARACTER(LEN=PATH_LEN) :: NOM_CAS
49  CHARACTER(LEN=PATH_LEN) :: NOM_DIC
50 !-----------------------------------------------------------------------
51 !
52 ! ARRAYS USED IN THE DAMOCLES CALL
53 !
54  INTEGER ADRESS(4,maxkeyword),DIMEN(4,maxkeyword)
55  DOUBLE PRECISION MOTREA(maxkeyword)
56  INTEGER MOTINT(maxkeyword)
57  LOGICAL MOTLOG(maxkeyword)
58  CHARACTER(LEN=PATH_LEN) MOTCAR(maxkeyword)
59  CHARACTER(LEN=72) MOTCLE(4,maxkeyword,2)
60  INTEGER TROUVE(4,maxkeyword)
61  LOGICAL DOC
62  INTEGER :: ID_DICO, ID_CAS
63 !
64 ! END OF DECLARATIONS FOR DAMOCLES CALL
65 !
66 !***********************************************************************
67 !
68  WRITE(lu,2)
69 2 FORMAT(1x,/,19x, '********************************************',/,
70  & 19x, '* SUBROUTINE LECDON_WAQTEL *',/,
71  & 19x, '* CALL OF DAMOCLES *',/,
72  & 19x, '* VERIFICATION OF READ DATA *',/,
73  & 19x, '* ON STEERING FILE *',/,
74  & 19x, '********************************************',/)
75 !
76 !-----------------------------------------------------------------------
77 !
78 ! INITIALISES THE VARIABLES FOR DAMOCLES CALL :
79 !
80  DO k=1,maxkeyword
81 ! A FILENAME NOT GIVEN BY DAMOCLES WILL BE RECOGNIZED AS A WHITE SPACE
82 ! (IT MAY BE THAT NOT ALL COMPILERS WILL INITIALISE LIKE THAT)
83  motcar(k)(1:1)=' '
84 !
85  dimen(1,k) = 0
86  dimen(2,k) = 0
87  dimen(3,k) = 0
88  dimen(4,k) = 0
89  ENDDO
90 !
91 ! WRITES OUT INFO
92  doc = .false.
93 !
94 !-----------------------------------------------------------------------
95 ! OPENS DICTIONNARY AND STEERING FILES
96 !-----------------------------------------------------------------------
97 !
98  IF(ncar.GT.0) THEN
99 !
100  nom_dic=path(1:ncar)//'WAQDICO'
101  nom_cas=path(1:ncar)//'WAQCAS'
102 !
103  ELSE
104 !
105  nom_dic='WAQDICO'
106  nom_cas='WAQCAS'
107 !
108  ENDIF
109  IF((cas_file(1:1).NE.' ').AND.(dico_file(1:1).NE.' ')) THEN
110  nom_dic=dico_file
111  nom_cas=cas_file
112  ENDIF
113 !
114  CALL get_free_id(id_dico)
115  OPEN(id_dico,file=nom_dic,form='FORMATTED',action='READ')
116  CALL get_free_id(id_cas)
117  OPEN(id_cas,file=nom_cas,form='FORMATTED',action='READ')
118 !
119  CALL damocle
120  &( adress, dimen , maxkeyword , doc , lng , lu , motint,
121  & motrea, motlog, motcar, motcle , trouve, id_dico, id_cas,
122  & .false.,file_desc)
123 !-----------------------------------------------------------------------
124 ! CLOSES DICTIONNARY AND STEERING FILES
125 !-----------------------------------------------------------------------
126 !
127  CLOSE(id_dico)
128  CLOSE(id_cas)
129 !
130 ! DECODES 'SUBMIT' CHAINS
131 !
132  CALL read_submit(waq_files,maxlu_waq,file_desc,maxkeyword)
133 !
134 !-----------------------------------------------------------------------
135 !
136 ! RETRIEVES FILE NUMBERS FROM WAQTEL FORTRAN PARAMETERS
137 ! AT THIS LEVEL LOGICAL UNITS ARE EQUAL TO THE FILE NUMBER
138 !
139  DO i=1,maxlu_waq
140  IF (waq_files(i)%TELNAME.EQ.'WAQGEO') THEN
141  waqgeo=i
142  ELSEIF(waq_files(i)%TELNAME.EQ.'WAQCLI') THEN
143  waqcli=i
144  ELSEIF(waq_files(i)%TELNAME.EQ.'WAQHYD') THEN
145  waqhyd=i
146  ELSEIF(waq_files(i)%TELNAME.EQ.'WAQREF') THEN
147  waqref=i
148  ELSEIF(waq_files(i)%TELNAME.EQ.'WAQRES') THEN
149  waqres=i
150  ENDIF
151  ENDDO
152 !
153 !-----------------------------------------------------------------------
154 !
155 ! ASSIGNS THE STEERING FILE VALUES TO THE PARAMETER FORTRAN NAME
156 !
157 !-----------------------------------------------------------------------
158 !*******************************
159 ! INTEGER KEYWORDS *
160 !*******************************
161 !
162 ! PRINTOUT WAQ PERIOD
163  leoprd = motint( adress(1, 1) )
164 ! K2 FORMULA
165  formk2 = motint( adress(1, 3) )
166 ! RS FORMULA
167  formrs = motint( adress(1, 4) )
168 ! CS FORMULA
169  formcs = motint( adress(1, 5) )
170 ! MODEL OF EXCHANGE WITH ATMOSPHERE
171  atmosexch = motint( adress(1, 9) )
172 ! BRIGHTNESS OF THE SKY
173  iskytype = motint( adress(1, 10) )
174 ! DEBUG KEYWORD
175  debug = motint( adress(1, 11) )
176 ! RAY EXTINCTION METHOD
177  mextinc = motint( adress(1, 12) )
178 ! FORMULA OF ATMOSPHERIC RADIATION (GLM)
179  iray_atm = motint( adress(1, 13) )
180 !
181 !*******************************
182 ! REAL KEYWORDS *
183 !*******************************
184 !
185  ro0 = motrea( adress(2, 2) )
186 ! GRAV = MOTREA( ADRESS(2, 5) )
187  vce = motrea( adress(2, 8) )
188  ldisp = motrea( adress(2, 11) )
189  tdisp = motrea( adress(2, 12) )
190  k120 = motrea( adress(2, 21) )
191  k520 = motrea( adress(2, 22) )
192  o2photo= motrea( adress(2, 25) )
193  o2nitri= motrea( adress(2, 26) )
194  demben = motrea( adress(2, 29) )
195  k22 = motrea( adress(2, 31) )
196  rsw = motrea( adress(2, 32) )
197  o2satu = motrea( adress(2, 33) )
198  abrs(1)= motrea( adress(2, 34) )
199  abrs(2)= motrea( adress(2, 34)+1)
200  wpor = motrea( adress(2, 36) )
201  wnor = motrea( adress(2, 39) )
202  cmax = motrea( adress(2, 42) )
203  zsd = motrea( adress(2, 45) )
204  extinc = motrea( adress(2, 46) )
205 !
206  kpe = motrea( adress(2, 51) )
207  ik = motrea( adress(2, 54) )
208  kp = motrea( adress(2, 57) )
209  kn = motrea( adress(2, 60) )
210  ctoxic = motrea( adress(2, 63) )
211  trespir= motrea( adress(2, 66) )
212  prophoc= motrea( adress(2, 69) )
213  dtp = motrea( adress(2, 71) )
214 ! CONVERSION OF DTP (FROM PERCENTAGE TO [])
215  dtp = dtp/100.d0
216  IF(dtp.GT.1.d0)THEN
217  WRITE(lu,*)'PERCENTAGE OF PHYSPHORUS ASSIMILABLE '
218  WRITE(lu,*)'IN DEAD PHYTOPLANKTON GREATER THAN 100 %'
219  CALL plante(1)
220  stop
221  ENDIF
222  k320 = motrea( adress(2, 73) )
223  pronitc= motrea( adress(2, 75) )
224  pernits= motrea( adress(2, 77) )
225 ! CONVERSION OF PERNITS (FROM PERCENTAGE TO [])
226  pernits=pernits/100.d0
227  IF(pernits.GT.1.d0)THEN
228  WRITE(lu,*)'PERCENTAGE OF ASSIMILABLE NITROGEN '
229  WRITE(lu,*)'IN DEAD PHYTOPLANKTON GREATER THAN 100 %'
230  CALL plante(1)
231  stop
232  ENDIF
233  k360 = motrea( adress(2, 79) )
234  cmoralg= motrea( adress(2, 81) )
235  wlor = motrea( adress(2, 85) )
236  k1 = motrea( adress(2, 90) )
237  k44 = motrea( adress(2, 93) )
238  photo = motrea( adress(2, 95) )
239  resp = motrea( adress(2, 97) )
240  wattemp= motrea( adress(2, 99) )
241  ero = motrea( adress(2,104) )
242  taur = motrea( adress(2,106) )
243  taus = motrea( adress(2,109) )
244  vitchu = motrea( adress(2,111) )
245  ccsedim= motrea( adress(2,113) )
246  cdistrib=motrea( adress(2,115) )
247  kdesorp= motrea( adress(2,117) )
248  cp_eau = motrea( adress(2,119) )
249  cp_air = motrea( adress(2,121) )
250  cfaer = motrea( adress(2,125) )
251  coef_k = motrea( adress(2,127) )
252  ema = motrea( adress(2,129) )
253  emi_eau= motrea( adress(2,131) )
254  i0 = motrea( adress(2,133) )
255  c_atmos= motrea( adress(2,135) )
256  evaporation= motrea( adress(2,137) )
257 !
258  IF(trouve(2,125).EQ.2) THEN
259 ! WIND FUNCTION FOR ATMOSPHERIC-WATER EXCHANGE MODEL IN 3D
260 ! WITH 2 COEFFICIENTS, ONLY IF THE USER FILLS THE KEYWORD
261  n_c_atmos = 2
262  WRITE(lu,*) 'IF NEEDED IN 3D, A WIND FUNCTION WITH 2 PARAMETERS'
263  WRITE(lu,*) 'WILL BE USED FOR ATMOSPHER-WATER EXCHANGE MODEL'
264  ELSE
265 ! WIND FUNCTION FOR ATMOSPHERIC-WATER EXCHANGE MODEL IN 3D
266 ! WITH 1 COEFFICIENT (DEFAULT)
267  n_c_atmos = 1
268  ENDIF
269 !
270 !*******************************
271 ! LOGICAL KEYWORDS *
272 !*******************************
273 !
274  wqbilmas= motlog( adress(3, 1) )
275  wqvalid = motlog( adress(3, 3) )
276  solradmeteo = motlog( adress(3, 2) )
277 !
278 !*******************************
279 ! STRING KEYWORDS *
280 !*******************************
281 !
282  titwaqcas = motcar( adress(4, 2) ) (1:72)
283 !
284 ! FILES IN THE STEERING FILE
285 !
286  waq_files(waqres)%NAME=motcar( adress(4,6 ) )
287  waq_files(waqres)%FMT=motcar( adress(4,20) )(1:8)
288  waq_files(waqgeo)%NAME=motcar( adress(4,8 ) )
289  waq_files(waqgeo)%FMT=motcar( adress(4,21) )(1:8)
290  waq_files(waqref)%NAME=motcar( adress(4,12) )
291  waq_files(waqref)%FMT=motcar( adress(4,23) )(1:8)
292  waq_files(waqhyd)%NAME=motcar( adress(4,14) )
293  waq_files(waqhyd)%FMT=motcar( adress(4,22) )(1:8)
294  waq_files(waqcli)%NAME=motcar( adress(4,10 ) )
295 !
296 !
297 !*******************************
298 ! COMBINED KEYWORDS *
299 !*******************************
300 !
301 ! TRACERS DEGRADATION LAW (WAQPROCESS = 17)
302 !
303  IF( (trouve(1,8).EQ.2).OR.(trouve(2,78).EQ.2) ) THEN
304  IF( (dimen(1,8).LE.waqtr).AND.(dimen(2,78).LE.waqtr) ) THEN
305 !
306  ALLOCATE(loitrac(waqtr))
307  loitrac = 0
308  ALLOCATE(coef1trac(waqtr))
309  coef1trac = 0.d0
310 !
311  DO i=1,dimen(1,8)
312  loitrac(i) = motint(adress(1,8)+i-1)
313  ENDDO
314  DO i=1,dimen(2,78)
315  coef1trac(i) = motrea(adress(2,78)+i-1)
316  ENDDO
317 !
318  ELSE
319  WRITE(lu,*) 'THE NUMBER OF TRACERS DEFINED BY THE LAW OF'
320  WRITE(lu,*) ' TRACERS DEGRADATION SHOULD BE AT LEAST EQUAL'
321  WRITE(lu,*) ' TO THE NUMBER OF TRACERS NAMED ',waqtr
322  CALL plante(1)
323  stop
324  ENDIF
325  ENDIF
326 !
327 !-----------------------------------------------------------------------
328 ! NAME OF THE VARIABLES FOR THE RESULTS AND GEOMETRY FILES:
329 !-----------------------------------------------------------------------
330 !
331 ! LOGICAL ARRAY FOR OUTPUT
332 !
333 ! CALL NOMVAR_WAQTEL(TEXTE,TEXTPR,MNEMO,MAXWQVAR)
334 !
335 ! ARRAY OF LOGICALS FOR OUTPUTS
336 !
337 ! CALL SORTIE(SORT2D , MNEMO , MAXWQVAR , SORLEO )
338 !
339  DO k=1,maxwqvar
340  sorimp(k)=.false.
341  ENDDO
342 !-----------------------------------------------------------------------
343 !
344  RETURN
345  END SUBROUTINE
double precision cp_air
double precision o2nitri
integer, dimension(:), allocatable loitrac
double precision pernits
logical, dimension(maxwqvar) sorimp
double precision, dimension(2) ctoxic
integer, parameter maxwqvar
character(len=72) titwaqcas
double precision ldisp
double precision vitchu
double precision o2satu
double precision kdesorp
double precision tdisp
double precision extinc
subroutine read_submit(FILES, NFILES, SUBMIT, NMOT)
Definition: read_submit.f:7
subroutine lecdon_waqtel(FILE_DESC, PATH, NCAR, CAS_FILE, DICO_FILE)
Definition: lecdon_waqtel.f:7
double precision, dimension(:), allocatable coef1trac
integer, parameter maxkeyword
double precision emi_eau
double precision trespir
double precision demben
double precision, dimension(2) abrs
double precision ccsedim
double precision coef_k
double precision cdistrib
double precision prophoc
double precision pronitc
double precision, dimension(2) cfaer
type(bief_file), dimension(maxlu_waq), target waq_files
double precision, dimension(2) cmoralg
subroutine damocle(ADRESS, DIMENS, NMAX, DOC, LLNG, LLU, MOTINT, MOTREA, MOTLOG, MOTCAR, MOTCLE, TROUVE, NFICMO, NFICDA, GESTD, MOTATT)
Definition: damocle.f:9
double precision, target cp_eau
double precision photo
double precision evaporation
double precision, target c_atmos
double precision o2photo
double precision wattemp
integer, parameter maxlu_waq
Definition: bief.f:3