SURFEX v8.1
General documentation of Surfex
faitou.F90
Go to the documentation of this file.
1 ! Jan-2013 P. Marguinaud Use JNGEOM & JNEXPL parameters
2 ! Oct-2012 P. Marguinaud 64b LFI
3 ! Jan-2011 P. Marguinaud Thread-safe FA
4 SUBROUTINE faitou_fort &
5 & (fa, krep, knumer, ldnomm, cdnomf, cdsttu, &
6 & lderfa, ldimst, knimes, knbarp, knbari, &
7 & cdnomc)
9 USE parkind1, ONLY : jprb
10 USE yomhook , ONLY : lhook, dr_hook
11 USE lfi_precision
12 IMPLICIT NONE
13 !****
14 ! Sous-programme d'OUVERTURE d'une unite logique "Fichier ARPEGE"
15 ! Il s'agit d'un fichier indexe, traite par le logiciel LFI.
16 !
17 !**
18 ! ARGUMENTS : Ce sont les memes que pour "LFIOUV", avec CDNOMC comme
19 ! argument supplementaire.
20 !
21 ! KREP (Sortie) ==> Code-reponse du sous-programme;
22 ! KNUMER (Entree) ==> Numero de l'unite logique;
23 ! LDNOMM (Entree) ==> Vrai si l'unite logique doit etre
24 ! associee a un NOM de Fichier EXP-
25 ! LICITE lors de l'"OPEN" FORTRAN;
26 ! CDNOMF (Entree) ==> Nom de fichier explicite, si
27 ! *LDNOMM* est VRAI - Meme si ce
28 ! n'est pas le cas, ce *DOIT* ETRE
29 ! UN OBJET DE TYPE "CHARACTER" .
30 ! CDSTTU (Entree) ==> "STATUS" pour l'"OPEN" FORTRAN
31 ! ('OLD','NEW','UNKNOWN','SCRATCH')
32 ! par defaut, mettre 'UNKNOWN';
33 ! LDERFA (Entree) ==> Option d'erreur fatale;
34 ! LDIMST (Entree) ==> Option impression de Statistiques
35 ! au moment de la fermeture;
36 ! KNIMES (Entree) ==> Niveau de la Messagerie (0,1 ou 2)
37 ! ( 0==>Rien, 2==>Tout )
38 ! KNBARP (Entree) ==> Nombre d'articles logiques prevus,
39 ! ce qui n'est utilise que lors de
40 ! la Creation du fichier,
41 ! et qui n'empeche quand meme pas
42 ! d'avoir plus d'articles logiques;
43 ! KNBARI (Sortie) ==> Nombre d'articles logiques de don-
44 ! nees sur le fichier, initialement.
45 ! (zero si creation)
46 ! CDNOMC (Entree) ==> Nom du CADRE associe au fichier.
47 !*
48 ! N.B. : Pour un fichier en mode creation, ce cadre doit avoir ete
49 ! defini au prealable (via le sous-programme FACADE, ou par
50 ! l'ouverture d'un fichier preexistant).
51 ! Pour un fichier ARPEGE preexistant, le cadre est lu sur le
52 ! fichier; s'il etait deja defini auparavant, il y a controle
53 ! de coherence entre les deux versions du cadre.
54 !
55 !
56 !
57 TYPE(fa_com) :: FA
58 INTEGER (KIND=JPLIKB) KREP, KNUMER, KNIMES, KNBARP, KNBARI
59 !
60 INTEGER (KIND=JPLIKB) IRANG, IRANMS
61 INTEGER (KIND=JPLIKB) IREPOU, ILNOMC, ILOMIN, IREP, J
62 INTEGER (KIND=JPLIKB) INBARP, IRANER, IRANGC
63 INTEGER (KIND=JPLIKB) INPAHE, INLATI, ISULEI, INPIND
64 INTEGER (KIND=JPLIKB) INIVER, ILONGA
65 INTEGER (KIND=JPLIKB) ITRONC, ILACTI, INIMES, INXLON
66 INTEGER (KIND=JPLIKB) ITYPTR, IPHASE, IGARDE, IPOSEX, IPUILA
67 !
68 INTEGER (KIND=JPLIKB) IDIMEN (fa%jpcadi)
69 INTEGER (KIND=JPLIKB) IRDPOL (fa%jpxpah+fa%jpxind)
70 INTEGER (KIND=JPLIKB) IDATEF (fa%jpldat), IDATXF (fa%jpldat)
71 INTEGER (KIND=JPLIKB) ILDIMEN(fa%jpcadi), &
72 & ILRDPOL(FA%JPXPAH+FA%JPXIND)
73 INTEGER (KIND=JPLIKB) ILPNVER
74 !
75 REAL (KIND=JPDBLR) ZCHMID (fa%jpcafs), ZSINLA (fa%jpxgeo)
76 REAL (KIND=JPDBLR) ZHYBRI (0:(1+fa%jpxniv)*2)
77 !
78 LOGICAL LDNOMM, LDERFA, LDIMST, LLVERG, LLNOUF, LLNOUC, LLRLFI
79 LOGICAL LLMODC, LLREDF, LLMODA, LLMLAM
80 !
81 CHARACTER CDNOMF*(*), CDSTTU*(*), CDNOMC*(*)
82 !
83 CHARACTER(LEN=FA%JPXNOM) CLACTI
84 CHARACTER(LEN=FA%JPXNOM) CLNOMA
85 CHARACTER(LEN=FA%JPLMES) CLMESS
86 CHARACTER(LEN=FA%JPLSPX) CLNSPR
87 LOGICAL LLFATA
88 LOGICAL LLNEWF
89 
90 !**
91 ! 1. - CONTROLES DIVERS, ET OUVERTURE DU FICHIER AU SENS "LFI".
92 !-----------------------------------------------------------------------
93 !
94 ! Controle sommaire sur les arguments...le reste est "sous-traite"
95 ! au sous-programme LFIOUV.
96 !
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
98 IF (lhook) CALL dr_hook('FAITOU_MT',0,zhook_handle)
99 clacti=''
100 llnewf=.false.
101 irang=0
102 iraner=0
103 iranms=0
104 irepou=jpniil
105 llrlfi=.false.
106 llverg=.false.
107 ilnomc=int(len(cdnomc), jplikb)
108 ilomin=min( int(len(cdnomf), jplikb), &
109 & int(len(cdsttu), jplikb), ilnomc)
110 !
111 ! L'appel ci-dessous est legerement anticipe, de maniere a
112 ! initialiser les variables globales du logiciel s'il s'agit
113 ! du premier appel a un sous-programme de ce logiciel.
114 !
115 CALL fanumu_fort &
116 & (fa, knumer,irang)
117 ! Si KNUMER est nul, alors le numero d'unite logique est
118 ! attribuĂ© automatiquement
119 IF (knumer == 0) THEN
120  CALL faauto_fort (fa, knumer, .true.)
121  irang=0
122 ENDIF
123 !
124 IF (ilomin.LE.0) THEN
125  irep=-65
126  GOTO 1001
127 ELSEIF (irang.NE.0) THEN
128 !
129 ! Controle de non-ouverture prealable (au sens du logiciel)
130 !
131  irep=-55
132  iranms=irang
133  GOTO 1001
134 ENDIF
135 !
136 ! Verrouillage global, si necessaire.
137 !
138 IF (fa%LFAMUL) CALL lfiver_fort &
139 & (fa%LFI, fa%VRGLAS,'ON')
140 llverg=fa%LFAMUL
141 !
142 ! A-t-on deja atteint le nombre limite de fichiers ARPEGE
143 ! ouverts simultanement ? Si non, on cherche un emplacement libre
144 ! dans la table FA%NULOGI (logiquement, il devrait en exister un)
145 !
146 IF (fa%NFIOUV.GE.fa%JPNXFA) THEN
147  irep=-56
148  GOTO 1001
149 ELSE
150 !
151  DO j=1,fa%JPNXFA
152 !
153  IF (fa%FICHIER(j)%NULOGI.EQ.jpniil) THEN
154  irang=j
155  GOTO 102
156  ENDIF
157 !
158  ENDDO
159 !
160  irep=-66
161  GOTO 1001
162 !
163 102 CONTINUE
164 !
165 ENDIF
166 !
167 ! Ouverture du fichier au sens du logiciel LFI.
168 ! (on ajoute au nombre d'articles prevus par l'utilisateur les
169 ! articles constituant le cadre, la date et l'identificateur)
170 !
171 inbarp=knbarp+7
172 CALL lfiouv_fort &
173 & (fa%LFI, irepou,knumer,ldnomm,cdnomf,cdsttu, &
174 & lderfa,ldimst, &
175 & knimes,inbarp,knbari)
176 !
177 IF (irepou.NE.0.AND.irepou.NE.-11) THEN
178  irep=irepou
179  llrlfi=.true.
180  GOTO 1001
181 ENDIF
182 !**
183 ! 2. - CONTROLES SPECIFIQUES AU LOGICIEL DE FICHIERS ARPEGE.
184 !-----------------------------------------------------------------------
185 !
186 llnouf=knbari.EQ.0
187 CALL fanuca_fort &
188 & (fa, cdnomc,irangc,.false.)
189 llnouc=irangc.EQ.0
190 !
191 IF (llnouf) THEN
192 !
193  IF (llnouc) THEN
194  irep=-57
195  GOTO 1001
196  ELSE
197 !
198 ! Fichier en mode creation et cadre predefini... OK a ce niveau.
199 !
200 ! On ecrit les articles definissant le cadre sur le fichier,
201 ! ainsi qu'un article ayant pour nom l'identificateur "par defaut",
202 ! (en fait, le nom du cadre) de maniere a ce que cet article soit
203 ! sequentiellement celui qui suit le dernier article du cadre.
204 !
205  llmlam=fa%CADRE(irangc)%LIMLAM
206 !
207  idimen(1)=fa%CADRE(irangc)%MTRONC
208  inlati=fa%CADRE(irangc)%NLATIT
209  IF (.NOT.llmlam) THEN
210  inpahe=(1+inlati)/2
211  ELSE
212  isulei=fa%CADRE(irangc)%NOZPAR(1)
213 !
214  inpind=2*isulei+4
215  ENDIF
216  idimen(2)=inlati
217  idimen(3)=fa%CADRE(irangc)%NXLOPA
218  iniver=fa%CADRE(irangc)%NNIVER
219  idimen(4)=iniver
220  idimen(5)=fa%CADRE(irangc)%NTYPTR
221  zchmid(1)=fa%CADRE(irangc)%SSLAPO
222  zchmid(2)=fa%CADRE(irangc)%SCLOPO
223  zchmid(3)=fa%CADRE(irangc)%SSLOPO
224  zchmid(4)=fa%CADRE(irangc)%SCODIL
225  zhybri(0)=fa%CADRE(irangc)%SPREFE
226  ilnomc=fa%CADRE(irangc)%NLCCAD
227  clnoma=cdnomc
228 !
229  IF (.NOT.llmlam) THEN
230 !
231  DO j=1,inpahe
232  irdpol(j)=fa%CADRE(irangc)%NLOPAR(j)
233  irdpol(inpahe+j)=fa%CADRE(irangc)%NOZPAR(j)
234  zsinla(j)=fa%CADRE(irangc)%SINLAT(j)
235  ENDDO
236 !
237  ELSE
238  DO j=1,jngeom
239  zsinla(j)=fa%CADRE(irangc)%SINLAT(j)
240  ENDDO
241  DO j=1,jnexpl
242  irdpol(j)=fa%CADRE(irangc)%NLOPAR(j)
243  ENDDO
244  DO j=1,inpind
245  irdpol(jnexpl+j)=fa%CADRE(irangc)%NOZPAR(j)
246  ENDDO
247 !
248  ENDIF
249 !
250  DO j=0,iniver
251  zhybri(j+1)=fa%CADRE(irangc)%SFOHYB(1,j)
252  zhybri(j+2+iniver)=fa%CADRE(irangc)%SFOHYB(2,j)
253  ENDDO
254 !
255  llrlfi=.true.
256  ildimen=idimen
257  CALL lfiecr_fort (fa%LFI, irep, knumer, fa%CPCADI, ildimen, fa%JPCADI)
258  idimen=ildimen
259  IF (irep.NE.0) GOTO 1001
260 !
261  CALL lfiecr_rd (fa%CPCAFS, zchmid, fa%JPCAFS)
262  IF (irep.NE.0) GOTO 1001
263 !
264  IF (.NOT.llmlam) THEN
265 !
266  ilonga=inpahe*2
267  ilrdpol=irdpol
268  CALL lfiecr_fort (fa%LFI, irep, knumer, fa%CPCARP, ilrdpol, ilonga)
269  irdpol=ilrdpol
270  IF (irep.NE.0) GOTO 1001
271 !
272  ilonga=inpahe
273  CALL lfiecr_rd (fa%CPCASL, zsinla, ilonga)
274  IF (irep.NE.0) GOTO 1001
275 !
276  ELSE
277 !
278  ilonga=jnexpl+inpind
279  ilrdpol=irdpol
280  CALL lfiecr_fort (fa%LFI, irep, knumer, fa%CPCARP, ilrdpol, ilonga)
281  irdpol=ilrdpol
282  IF (irep.NE.0) GOTO 1001
283 !
284  ilonga=jngeom
285  CALL lfiecr_rd (fa%CPCASL, zsinla, ilonga)
286  IF (irep.NE.0) GOTO 1001
287 !
288  ENDIF
289 !
290  ilonga=1+(1+iniver)*2
291  CALL lfiecr_rd (fa%CPCACH, zhybri, ilonga)
292  IF (irep.NE.0) GOTO 1001
293 !
294  ilpnver=fa%JPNVER
295  CALL lfiecr_fort (fa%LFI, irep, knumer, clnoma(1:ilnomc), ilpnver, 1_jplikb)
296  IF (irep.NE.0) GOTO 1001
297 !
298  llrlfi=.false.
299  GOTO 300
300  ENDIF
301 !
302 ENDIF
303 !*
304 ! 2.1 - Fichier preexistant...lecture et controle du Cadre "Fichier"
305 !-----------------------------------------------------------------------
306 !
307 CALL lfinfo_fort &
308 & (fa%LFI, irep,knumer,fa%CPCADI,ilonga,iposex)
309 !
310 IF (irep.NE.0) THEN
311  llrlfi=.true.
312  GOTO 1001
313 ELSEIF (ilonga.EQ.0) THEN
314  irep=-60
315  GOTO 1001
316 ELSEIF (ilonga.NE.fa%JPCADI) THEN
317  irep=-61
318  GOTO 1001
319 ENDIF
320 !
321 ildimen=idimen
322 CALL lfilec_fort (fa%LFI, irep, knumer, fa%CPCADI, ildimen, fa%JPCADI)
323 idimen=ildimen
324 !
325 IF (irep.NE.0) THEN
326  llrlfi=.true.
327  GOTO 1001
328 ENDIF
329 !
330 CALL lfinfo_fort (fa%LFI, irep, knumer, fa%CPCAFS, ilonga, iposex)
331 !
332 IF (irep.NE.0) THEN
333  llrlfi=.true.
334  GOTO 1001
335 ELSEIF (ilonga.EQ.0) THEN
336  irep=-60
337  GOTO 1001
338 ELSEIF (ilonga.NE.fa%JPCAFS) THEN
339  irep=-61
340  GOTO 1001
341 ENDIF
342 !
343 CALL lfilec_dr (fa%CPCAFS, zchmid, fa%JPCAFS)
344 !
345 IF (irep.NE.0) THEN
346  llrlfi=.true.
347  GOTO 1001
348 ENDIF
349 !
350 ! Coherence des dimensions par rapport aux valeurs "licites",
351 ! que l'on doit faire avant de poursuivre les lectures.
352 !
353 IF(idimen(5).LE.0) llmlam = .true.
354 itronc=idimen(1)
355 inlati=idimen(2)
356 inpahe=(1+inlati)/2
357 inxlon=idimen(3)
358 iniver=idimen(4)
359 ityptr=idimen(5)
360 iphase=1
361 igarde=1
362 CALL facadi_fort &
363 & (fa, irep,cdnomc,ityptr,zchmid(1),zchmid(2), &
364 & zchmid(3),zchmid(4),itronc,inlati,inxlon,irdpol(1), &
365 & irdpol(fa%JPXPAH+1),zsinla, &
366 & iniver,zhybri(0),zhybri(1),zhybri(fa%JPXNIV+2), &
367 & llmodc,llredf,iphase,irangc,ilnomc,igarde)
368 IF (irep.NE.0) GOTO 1001
369 !
370 CALL lfinfo_fort &
371 & (fa%LFI, irep,knumer,fa%CPCARP,ilonga,iposex)
372 !
373 IF (irep.NE.0) THEN
374  llrlfi=.true.
375  GOTO 1001
376 ELSEIF (ilonga.EQ.0) THEN
377  irep=-60
378  GOTO 1001
379 ELSEIF (ilonga.NE.inpahe*2) THEN
380  IF (.NOT.llmlam) THEN
381  irep=-61
382  GOTO 1001
383  ENDIF
384 ENDIF
385 !
386 ilrdpol=irdpol
387 CALL lfilec_fort (fa%LFI, irep, knumer, fa%CPCARP, ilrdpol, ilonga)
388 irdpol=ilrdpol
389 !
390 IF (irep.NE.0) THEN
391  llrlfi=.true.
392  GOTO 1001
393 ENDIF
394 !
395 CALL lfinfo_fort &
396 & (fa%LFI, irep,knumer,fa%CPCASL,ilonga,iposex)
397 !
398 IF (irep.NE.0) THEN
399  llrlfi=.true.
400  GOTO 1001
401 ELSEIF (ilonga.EQ.0) THEN
402  irep=-60
403  GOTO 1001
404 ELSEIF (ilonga.NE.inpahe) THEN
405  IF (.NOT.llmlam) THEN
406  irep=-61
407  GOTO 1001
408  ENDIF
409 ENDIF
410 !
411 CALL lfilec_dr (fa%CPCASL, zsinla, ilonga)
412 !
413 IF (irep.NE.0) THEN
414  llrlfi=.true.
415  GOTO 1001
416 ENDIF
417 !
418 CALL lfinfo_fort &
419 & (fa%LFI, irep,knumer,fa%CPCACH,ilonga,iposex)
420 !
421 IF (irep.NE.0) THEN
422  llrlfi=.true.
423  GOTO 1001
424 ELSEIF (ilonga.EQ.0) THEN
425  irep=-60
426  GOTO 1001
427 ELSEIF (ilonga.NE.1+(1+iniver)*2) THEN
428  IF (.NOT.llmlam) THEN
429  irep=-61
430  GOTO 1001
431  ENDIF
432 ENDIF
433 !
434 CALL lfilec_dr (fa%CPCACH, zhybri, ilonga)
435 !
436 IF (irep.NE.0) THEN
437  llrlfi=.true.
438  GOTO 1001
439 ENDIF
440 !
441 ! Tests complementaires sur les valeurs lues.
442 !
443 iphase=2
444 CALL facadi_fort &
445 & (fa, irep,cdnomc,ityptr,zchmid(1),zchmid(2), &
446 & zchmid(3),zchmid(4),itronc,inlati,inxlon,irdpol(1), &
447 & irdpol(inpahe+1),zsinla, &
448 & iniver,zhybri(0),zhybri(1),zhybri(iniver+2), &
449 & llmodc,llredf,iphase,irangc,ilnomc,igarde)
450 IF (irep.NE.0) GOTO 1001
451 !*
452 ! 2.2 - Fichier preexistant...l'identificateur du fichier est le
453 ! premier article suivant les articles du cadre.
454 !-----------------------------------------------------------------------
455 !
456 CALL lficas_fort &
457 & (fa%LFI, irep,knumer,clnoma,ilonga, &
458 & iposex,.false.)
459 !
460 IF (irep.NE.0) THEN
461  llrlfi=.true.
462  GOTO 1001
463 ELSEIF (ilonga.EQ.0) THEN
464  irep=-110
465  GOTO 1001
466 ENDIF
467 !
468 !*
469 ! 2.3 - Fichier preexistant...lecture et controle de l'article DATE.
470 !-----------------------------------------------------------------------
471 !
472 CALL lfinfo_fort &
473 & (fa%LFI, irep,knumer,fa%CPDATE,ilonga,iposex)
474 !
475 IF (irep.NE.0) THEN
476  llrlfi=.true.
477  GOTO 1001
478 ELSEIF (ilonga.EQ.0) THEN
479  irep=-62
480  GOTO 1001
481 ELSEIF (ilonga.NE.fa%JPLDAT) THEN
482  irep=-63
483  GOTO 1001
484 ENDIF
485 !
486 CALL lfilec_fort (fa%LFI, irep, knumer, fa%CPDATE, idatef, fa%JPLDAT)
487 !
488 IF (irep.NE.0) THEN
489  llrlfi=.true.
490  GOTO 1001
491 ENDIF
492 
493 !
494 !*
495 ! Fichier preexistant...lecture et controle de l'article DATX.
496 !-----------------------------------------------------------------------
497 !
498 CALL lfinfo_fort &
499 & (fa%LFI, irep,knumer,fa%CPDATX,ilonga,iposex)
500 !
501 IF (irep.NE.0) THEN
502  llrlfi=.true.
503  GOTO 1001
504 ELSEIF (ilonga.EQ.0) THEN
505  idatxf(:) = 0
506  GOTO 103
507 ELSEIF (ilonga.NE.fa%JPLDAT) THEN
508  irep=-63
509  GOTO 1001
510 ENDIF
511 !
512 CALL lfilec_fort (fa%LFI, irep, knumer, fa%CPDATX, idatxf, fa%JPLDAT)
513 !
514 IF (irep.NE.0) THEN
515  llrlfi=.true.
516  GOTO 1001
517 ENDIF
518 
519 103 CONTINUE
520 
521 CALL new_fichier (fa, fa%FICHIER(irang), fa%JPLDAT, itronc, ityptr)
522 llnewf = .true.
523 
524 !
525 ! La ligne ci-dessous evite a FANDAI de croire, eventuellement,
526 ! a une redefinition de date.
527 !
528 fa%FICHIER(irang)%LCREAF=.true.
529 !
530 ! Controle de la Date fichier, et stockage dans FA%MADATE.
531 !
532 CALL fandai_fort &
533 & (fa, irep,irang,idatef,idatxf,llmoda)
534 IF (irep.NE.0) GOTO 1001
535 !
536 ! Definition du Cadre proprement dite.
537 !
538 iphase=3
539 CALL facadi_fort &
540 & (fa, irep,cdnomc,ityptr,zchmid(1),zchmid(2), &
541 & zchmid(3),zchmid(4),itronc,inlati,inxlon,irdpol(1), &
542 & irdpol(inpahe+1),zsinla, &
543 & iniver,zhybri(0),zhybri(1),zhybri(iniver+2), &
544 & llmodc,llredf,iphase,irangc,ilnomc,igarde)
545 IF (irep.NE.0) GOTO 1001
546 !**
547 ! 3. - ON MET A JOUR LES TABLES RELATIVES AUX FICHIERS.
548 !-----------------------------------------------------------------------
549 !
550 300 CONTINUE
551 !
552 itronc=fa%CADRE(irangc)%MTRONC
553 ityptr=fa%CADRE(irangc)%NTYPTR
554 
555 IF (.NOT. llnewf) THEN
556  CALL new_fichier (fa, fa%FICHIER(irang), fa%JPLDAT, itronc, ityptr)
557  llnewf = .true.
558 ENDIF
559 
560 fa%NFIOUV=fa%NFIOUV+1
561 fa%NULIND(fa%NFIOUV)=irang
562 fa%FICHIER(irang)%NULOGI=knumer
563 fa%FICHIER(irang)%NUCADR=irangc
564 !
565 fa%FICHIER(irang)%LNOMME=ldnomm
566 fa%FICHIER(irang)%NIVOMS=knimes
567 fa%FICHIER(irang)%LERRFA=lderfa
568 fa%FICHIER(irang)%LCREAF=llnouf
569 fa%FICHIER(irang)%NBFPDG=fa%NBIPDG
570 fa%FICHIER(irang)%NBFCSP=fa%NBICSP
571 fa%FICHIER(irang)%NPUFLA=fa%NPUILA
572 fa%FICHIER(irang)%NMFDPL=fa%NMIDPL
573 fa%FICHIER(irang)%NFGRIB=fa%NIGRIB
574 fa%FICHIER(irang)%CIDENT=clnoma
575 !
576 IF (ityptr.LT.0) THEN
577  fa%FICHIER(irang)%NSTROF=min(fa%NSTROI,itronc-1,-ityptr-1)
578 ELSE
579  fa%FICHIER(irang)%NSTROF=min(fa%NSTROI,itronc-1)
580 ENDIF
581 !
582 ! Appel a FAINOC pour interpreter les eventuels defauts
583 ! de -1 pris par FA%NBFPDG, FA%NBFCSP, FA%NSTROF et FA%NPUFLA en
584 ! IRANG-ieme position.
585 !
586 CALL fainoc_fort &
587 & (fa, irang )
588 !
589 iraner=irang
590 iranms=irang
591 ipuila=fa%FICHIER(irang)%NPUFLA
592 !
593 fa%FICHIER(irang)%NCOGRIF(:)=fa%NCODGRI(:)
594 fa%FICHIER(irang)%NRASHO = 0
595 fa%FICHIER(irang)%NRASVE = 0
596 !
597 ! L'initialisation de FLAP1Dx sera faite dans FACSIM
598 !
599 fa%FICHIER(irang)%LIFLAP=.true.
600 !
601 !
602 IF (fa%LFAMUL) CALL lfiver_fort &
603 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'ASGN')
604 !
605 ! On incremente le nombre de fichiers attaches au cadre specifie.
606 !
607 fa%CADRE(irangc)%NULCAD=fa%CADRE(irangc)%NULCAD+1
608 irep=irepou
609 GOTO 1001
610 !**
611 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
612 !-----------------------------------------------------------------------
613 !
614 clacti='INQUIRE'
615 !
616 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
617 !
618 irep=abs(irep)
619 !**
620 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
621 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
622 !-----------------------------------------------------------------------
623 !
624 1001 CONTINUE
625 krep=irep
626 llfata=llmoer(irep,iraner)
627 !
628 IF (llfata) THEN
629  inimes=2
630 ELSE
631  inimes=ixnvms(iranms)
632 ENDIF
633 !
634 ! Deverrouillage global eventuel.
635 !
636 IF (llverg) CALL lfiver_fort &
637 & (fa%LFI, fa%VRGLAS,'OFF')
638 !
639 IF (.NOT.llfata.AND.inimes.EQ.0) THEN
640  IF (lhook) CALL dr_hook('FAITOU_MT',1,zhook_handle)
641  RETURN
642 ENDIF
643 !
644 clnspr='FAITOU'
645 !
646 IF (inimes.EQ.2) THEN
647 !
648  IF (ilnomc.GT.0) THEN
649  ilacti=min(int(len(clacti), jplikb),ilnomc)
650  clacti(1:ilacti)=cdnomc(1:ilnomc)
651  ELSE
652  ilacti=8
653  clacti=fa%CHAINC(:ilacti)
654  ENDIF
655 !
656  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
657 & '', LDNOMM= '',L1,'', CDSTTU='''''',A7,'''''', LDERFA= '',L1, &
658 & '', LDIMST= '',L1, &
659 & '', KNIMES='',I2,'', KNBARP='',I6,'' KNBARI='',I6)') &
660 & krep,knumer,ldnomm,cdsttu,lderfa,ldimst,knimes,knbarp,knbari
661  CALL faipar_fort &
662 & (fa, knumer,inimes,irep,.false.,clmess, &
663 & clnspr,clacti(1:ilacti),llrlfi)
664  clmess='CDNOMC='''//clacti(1:ilacti)//''''
665  CALL faipar_fort &
666 & (fa, knumer,inimes,irep,llfata,clmess, &
667 & clnspr,clacti(1:ilacti),llrlfi)
668 ENDIF
669 !
670 IF (lhook) CALL dr_hook('FAITOU_MT',1,zhook_handle)
671 
672 CONTAINS
673 
674 #include "facom2.llmoer.h"
675 #include "facom2.ixnvms.h"
676 
677 SUBROUTINE lfilec_dr (CDNOMA, PDONNE, KLONGA)
679 CHARACTER(LEN=*) :: CDNOMA
680 INTEGER (KIND=JPLIKB) :: KLONGA
681 REAL (KIND=JPDBLR) :: PDONNE (klonga)
682 REAL (KIND=JPDBLD) :: ZDONNE (klonga)
683 
684 CALL lfilec_fort (fa%LFI, irep, knumer, cdnoma, zdonne, klonga)
685 
686 pdonne = real(zdonne, jpdblr)
687 
688 END SUBROUTINE lfilec_dr
689 
690 SUBROUTINE lfiecr_rd (CDNOMA, PDONNE, KLONGA)
692 CHARACTER(LEN=*) :: CDNOMA
693 INTEGER (KIND=JPLIKB) :: KLONGA
694 REAL (KIND=JPDBLR) :: PDONNE (klonga)
695 REAL (KIND=JPDBLD) :: ZDONNE (klonga)
696 
697 zdonne = real(pdonne, jpdbld)
698 
699 CALL lfiecr_fort (fa%LFI, irep, knumer, cdnoma, zdonne, klonga)
700 
701 END SUBROUTINE lfiecr_rd
702 
703 END SUBROUTINE faitou_fort
704 
705 
706 
707 ! Oct-2012 P. Marguinaud 64b LFI
708 SUBROUTINE faitou64 &
709 & (krep, knumer, ldnomm, cdnomf, cdsttu, lderfa, &
710 & ldimst, knimes, knbarp, knbari, cdnomc)
711 USE fa_mod, ONLY : fa => fa_com_default, &
714 USE lfi_precision
715 IMPLICIT NONE
716 ! Arguments
717 INTEGER (KIND=JPLIKB) KREP ! OUT
718 INTEGER (KIND=JPLIKB) KNUMER ! IN
719 LOGICAL LDNOMM ! IN
720 CHARACTER (LEN=*) CDNOMF ! IN
721 CHARACTER (LEN=*) CDSTTU ! IN
722 LOGICAL LDERFA ! IN
723 LOGICAL LDIMST ! IN
724 INTEGER (KIND=JPLIKB) KNIMES ! IN
725 INTEGER (KIND=JPLIKB) KNBARP ! IN
726 INTEGER (KIND=JPLIKB) KNBARI ! OUT
727 CHARACTER (LEN=*) CDNOMC ! IN
728 
729 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
730 
731 CALL faitou_fort &
732 & (fa, krep, knumer, ldnomm, cdnomf, cdsttu, lderfa, &
733 & ldimst, knimes, knbarp, knbari, cdnomc)
734 
735 END SUBROUTINE faitou64
736 
737 SUBROUTINE faitou &
738 & (krep, knumer, ldnomm, cdnomf, cdsttu, lderfa, &
739 & ldimst, knimes, knbarp, knbari, cdnomc)
740 USE fa_mod, ONLY : fa => fa_com_default, &
743 USE lfi_precision
744 IMPLICIT NONE
745 ! Arguments
746 INTEGER (KIND=JPLIKM) KREP ! OUT
747 INTEGER (KIND=JPLIKM) KNUMER ! IN
748 LOGICAL LDNOMM ! IN
749 CHARACTER (LEN=*) CDNOMF ! IN
750 CHARACTER (LEN=*) CDSTTU ! IN
751 LOGICAL LDERFA ! IN
752 LOGICAL LDIMST ! IN
753 INTEGER (KIND=JPLIKM) KNIMES ! IN
754 INTEGER (KIND=JPLIKM) KNBARP ! IN
755 INTEGER (KIND=JPLIKM) KNBARI ! OUT
756 CHARACTER (LEN=*) CDNOMC ! IN
757 
758 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
759 
760 CALL faitou_mt &
761 & (fa, krep, knumer, ldnomm, cdnomf, cdsttu, lderfa, &
762 & ldimst, knimes, knbarp, knbari, cdnomc)
763 
764 END SUBROUTINE faitou
765 
766 SUBROUTINE faitou_mt &
767 & (fa, krep, knumer, ldnomm, cdnomf, cdsttu, lderfa, &
768 & ldimst, knimes, knbarp, knbari, cdnomc)
769 USE fa_mod, ONLY : fa_com
770 USE lfi_precision
771 IMPLICIT NONE
772 ! Arguments
773 type(fa_com) fa ! INOUT
774 INTEGER (KIND=JPLIKM) KREP ! OUT
775 INTEGER (KIND=JPLIKM) KNUMER ! IN
776 LOGICAL LDNOMM ! IN
777 CHARACTER (LEN=*) CDNOMF ! IN
778 CHARACTER (LEN=*) CDSTTU ! IN
779 LOGICAL LDERFA ! IN
780 LOGICAL LDIMST ! IN
781 INTEGER (KIND=JPLIKM) KNIMES ! IN
782 INTEGER (KIND=JPLIKM) KNBARP ! IN
783 INTEGER (KIND=JPLIKM) KNBARI ! OUT
784 CHARACTER (LEN=*) CDNOMC ! IN
785 ! Local integers
786 INTEGER (KIND=JPLIKB) IREP ! OUT
787 INTEGER (KIND=JPLIKB) INUMER ! IN
788 INTEGER (KIND=JPLIKB) INIMES ! IN
789 INTEGER (KIND=JPLIKB) INBARP ! IN
790 INTEGER (KIND=JPLIKB) INBARI ! OUT
791 ! Convert arguments
792 
793 inumer = int( knumer, jplikb)
794 inimes = int( knimes, jplikb)
795 inbarp = int( knbarp, jplikb)
796 
797 CALL faitou_fort &
798 & (fa, irep, inumer, ldnomm, cdnomf, cdsttu, lderfa, &
799 & ldimst, inimes, inbarp, inbari, cdnomc)
800 
801 krep = int( irep, jplikm)
802 knbari = int( inbari, jplikm)
803 
804 IF (knumer == 0) THEN
805  knumer = int( inumer, jplikm)
806 ENDIF
807 
808 END SUBROUTINE faitou_mt
809 
810 !INTF KREP OUT
811 !INTF KNUMER IN
812 !INTF LDNOMM IN
813 !INTF CDNOMF IN
814 !INTF CDSTTU IN
815 !INTF LDERFA IN
816 !INTF LDIMST IN
817 !INTF KNIMES IN
818 !INTF KNBARP IN
819 !INTF KNBARI OUT
820 !INTF CDNOMC IN
subroutine lfiecr_fort(LFI, KREP, KNUMER, CDNOMA, KTAB, KLONG)
Definition: lfiecr.F90:6
subroutine lfilec_dr(CDNOMA, PDONNE, KLONGA)
Definition: faitou.F90:678
integer, parameter jplikb
subroutine faauto_fort(FA, KNUMER, LDLFI)
Definition: faauto.F90:3
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine lfiecr_rd(CDNOMA, PDONNE, KLONGA)
Definition: faitou.F90:691
subroutine facadi_fort(FA, KREP, CDNOMC, KTYPTR, PSLAPO, PCLOPO, PSLOPO, PCODIL, KTRONC, KNLATI, KNXLON, KNLOPA, KNOZPA, PSINLA, KNIVER, PREFER, PAHYBR, PBHYBR, LDMODC, LDREDF, KPHASE, KRANGC, KLNOMC, KGARDE)
Definition: facadi.F90:12
subroutine new_fa_default()
Definition: fa_mod.F90:649
integer(kind=jplikb), parameter jnexpl
Definition: fa_mod.F90:29
subroutine fandai_fort(FA, KREP, KRANG, KDATEF, KDATXF, LDMODA)
Definition: fandai.F90:5
subroutine faitou64(KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: faitou.F90:711
subroutine fanuca_fort(FA, CDNOMC, KRANGC, LDVERR)
Definition: fanuca.F90:5
integer, parameter jpdbld
Definition: fa_mod.F90:1
subroutine lfinfo_fort(LFI, KREP, KNUMER, CDNOMA, KLONG, KPOSEX)
Definition: lfinfo.F90:6
subroutine faitou_mt(FA, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: faitou.F90:769
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lficas_fort(LFI, KREP, KNUMER, CDNOMA, KLONG, KPOSEX, LDAVAN)
Definition: lficas.F90:7
subroutine fainoc_fort(FA, KRANG)
Definition: fainoc.F90:5
subroutine lfilec_fort(LFI, KREP, KNUMER, CDNOMA, KTAB, KLONG)
Definition: lfilec.F90:6
integer, parameter jpdblr
logical lhook
Definition: yomhook.F90:15
subroutine new_fichier(FA, FI, KPLDAT, KPXTRO, KTYPTR)
Definition: fa_mod.F90:609
subroutine lfiouv_fort(LFI, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTO, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI)
Definition: lfiouv.F90:9
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
integer(kind=jplikb), parameter jngeom
Definition: fa_mod.F90:28
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
subroutine faitou_fort(FA, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: faitou.F90:8
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31
subroutine faitou(KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: faitou.F90:740
real8 real
Definition: privpub.h:396