SURFEX v8.1
General documentation of Surfex
facadi.F90
Go to the documentation of this file.
1 ! Feb-2013 P. Marguinaud Use JNGEOM & JNEXPL parameters
2 ! Reallocate cadre when redefinition happens
3 ! Oct-2012 P. Marguinaud 64b LFI
4 ! Jan-2011 P. Marguinaud Thread-safe FA
5 SUBROUTINE facadi_fort &
6 & (fa, krep, cdnomc, ktyptr, pslapo, pclopo, &
7 & pslopo, &
8 & pcodil, ktronc, knlati, knxlon, knlopa, &
9 & knozpa, psinla, kniver, prefer, pahybr, &
10 & pbhybr, ldmodc, ldredf, kphase, krangc, &
11 & klnomc, kgarde)
13 USE parkind1, ONLY : jprb
14 USE yomhook , ONLY : lhook, dr_hook
15 USE lfi_precision
16 IMPLICIT NONE
17 !****
18 ! Sous-programme A USAGE INTERNE AU LOGICIEL. Fait la plupart
19 ! des controles en vue de Definir un CADre, voire le redefinir.
20 ! En mode multi-taches, il doit y avoir verrouillage global
21 ! de la zone d'appel au sous-programme.
22 !**
23 ! Arguments : KREP ==> Code-reponse du sous-programme;
24 ! CDNOMC ==> Nom symbolique du cadre;
25 ! (tous d'Entree) KTYPTR ==> Type de transformation horizontale;
26 ! sauf KRANGC PSLAPO ==> Sinus de la latitude du pole d'interet;
27 ! et KLNOMC) PCLOPO ==> Cosinus " " longitude " " " ;
28 ! PSLOPO ==> Sinus " " longitude " " " ;
29 ! PCODIL ==> Coefficient de dilatation;
30 ! KTRONC ==> Troncature;
31 ! KNLATI ==> Nombre de latitudes (de pole a pole);
32 ! KNXLON ==> Nombre maxi de longitudes par parallele;
33 ! (Tableau) KNLOPA ==> Nombre de longitudes par parallele;
34 ! (du pole nord vers l'equateur seulement)
35 ! (Tableau) KNOZPA ==> Nombre d'onde zonal maxi par parallele;
36 ! (du pole nord vers l'equateur seulement)
37 ! (Tableau) PSINLA ==> Sinus des latitudes de l'hemisphere nord
38 ! (du pole nord vers l'equateur seulement)
39 ! KNIVER ==> Nombre de niveaux verticaux;
40 ! PREFER ==> Pression de reference (facteur multipli-
41 ! catif de la premiere fonction de la
42 ! coordonnee hybride)
43 ! (Tableau) PAHYBR ==> Valeurs de la fonction "A" de la coordo-
44 ! nnee hybride AUX LIMITES DE COUCHES;
45 ! (Tableau) PBHYBR ==> Valeurs de la fonction "B" de la coordo-
46 ! nnee hybride AUX LIMITES DE COUCHES;
47 ! LDMODC ==> Vrai s'il y a modification d'un cadre
48 ! deja defini au prealable;
49 ! LDREDF ==> Vrai s'il y a redefinition d'un cadre
50 ! au sens large du terme (avec ou sans
51 ! modification).
52 ! KPHASE ==> Indique quelle(s) phase(s) du sous-prog.
53 ! on doit executer:
54 ! 0 ==> Toutes,
55 ! 1 ==> Controle des variables simples,
56 ! 2 ==> Controle des tableaux,
57 ! 3 ==> Definition du cadre seule.
58 ! (Sortie) KRANGC ==> Rang du cadre dans les tables.
59 ! (Sortie si phase 1,KLNOMC ==> Longueur en caracteres du nom de cadre.
60 ! Entree sinon ! )
61 ! KGARDE ==> Option de conservation du cadre
62 ! apres la fermeture du dernier fichier
63 ! qui s'y rattache. A noter que lors dans
64 ! le cas d'une definition dynamique de
65 ! cadre (appel par FAITOU, avec KGARDE=1),
66 ! une redefinition de cadre n'est toleree
67 ! qu'a l'identique.
68 !
69 ! N.B. : En mode multi-taches, si l'on appelle le sous-programme
70 ! avec KPHASE=0 ou KPHASE=3, on doit verrouiller dans le
71 ! programme appelant l'appel au sous-programme.
72 ! Par ailleurs, LDMODC et LDREDF ne sont definis que si
73 ! KPHASE=0 ou KPHASE=3.
74 !*
75 ! La "redefinition" d'un cadre est possible a l'une de ces
76 ! conditions:
77 !
78 ! - le cadre a ete defini, mais n'a aucun fichier qui s'y rattache;
79 ! - le cadre defini a au moins un fichier qui s'y rattache, et les
80 ! nouveaux parametres de definition sont identiques a ceux deja
81 ! definis (a l'exception de l'option de conservation).
82 !
83 !
84 !
85 TYPE(fa_com) :: FA
86 INTEGER (KIND=JPLIKB) KTYPTR, KTRONC, KNLATI
87 INTEGER (KIND=JPLIKB) KNXLON, KNIVER, KREP, KPHASE
88 INTEGER (KIND=JPLIKB) KRANGC, KLNOMC, KGARDE
89 !
90 INTEGER (KIND=JPLIKB) KNLOPA (fa%jpxpah), KNOZPA (fa%jpxind)
91 !
92 REAL (KIND=JPDBLR) PSLAPO, PCLOPO, PSLOPO, PCODIL, PREFER
93 !
94 REAL (KIND=JPDBLR) PSINLA (fa%jpxgeo), PAHYBR (0:kniver)
95 REAL (KIND=JPDBLR) PBHYBR (0:kniver)
96 REAL (KIND=JPDBLR),PARAMETER :: ZEPS=1.e-15_jpdblr
97 !
98 CHARACTER CDNOMC*(*)
99 !
100 LOGICAL LDREDF, LDMODC
101 !
102 INTEGER (KIND=JPLIKB) INPAHE
103 INTEGER (KIND=JPLIKB) ILCDNO, J, IPREC, ICOMPT, IMSMAX
104 INTEGER (KIND=JPLIKB) ISFLAM, JL, IK, INIMES, INUMER, ILNOMC
105 !
106 INTEGER (KIND=JPLIKB) IESN0 (0:fa%jpxtro)
107 INTEGER (KIND=JPLIKB) IKNTMP(0:fa%jpxtro)
108 INTEGER (KIND=JPLIKB) IKMTMP(0:fa%jpxtro)
109 INTEGER (KIND=JPLIKB) ICPL4N(0:fa%jpxtro)
110 !
111 REAL (KIND=JPDBLR) ZMIN, ZPMIN, ZPMAX, ZPMINP, ZPMAXP
112 !
113 LOGICAL LLMLAM
114 CHARACTER(LEN=FA%JPXNOM) CLACTI
115 CHARACTER(LEN=FA%JPLMES) CLMESS
116 CHARACTER(LEN=FA%JPLSPX) CLNSPR
117 LOGICAL LLFATA
118 
119 !**
120 ! 0. - AIGUILLAGE EN FONCTION DE *KPHASE*.
121 !-----------------------------------------------------------------------
122 !
123 REAL(KIND=JPRB) :: ZHOOK_HANDLE
124 IF (lhook) CALL dr_hook('FACADI_MT',0,zhook_handle)
125 
126 clacti=''
127 krep=0
128 ldredf=.false.
129 ldmodc=.false.
130 !
131 IF (ktyptr .LE. 0 ) THEN
132  llmlam = .true.
133 ELSE
134  llmlam = .false.
135 ENDIF
136 !
137 inpahe=(1+knlati)/2
138 !
139 IF (kphase.EQ.2) THEN
140  GOTO 200
141 ELSEIF (kphase.EQ.3) THEN
142  GOTO 300
143 ELSEIF (kphase.LT.0.OR.kphase.GT.3) THEN
144  krep=-66
145  GOTO 1001
146 ENDIF
147 !**
148 ! 1. - CONTROLE DES VARIABLES SIMPLES (SYNTAXE ET COHERENCE).
149 ! (sauf pression de reference)
150 !-----------------------------------------------------------------------
151 !
152 ilcdno=int(len(cdnomc), jplikb)
153 klnomc=1
154 !
155 IF (ilcdno.LE.0) THEN
156  krep=-65
157  GOTO 1001
158 ELSEIF (cdnomc.EQ.' ') THEN
159  krep=-68
160  GOTO 1001
161 ELSEIF (kgarde.LT.0.OR.kgarde.GT.2) THEN
162  krep=-66
163  GOTO 1001
164 ENDIF
165 !
166 DO j=ilcdno,1,-1
167 !
168 IF (cdnomc(j:j).NE.' ') THEN
169  klnomc=j
170  GOTO 102
171 ENDIF
172 !
173 ENDDO
174 !
175 102 CONTINUE
176 !
177 IF (klnomc.GT.fa%NCPCAD) THEN
178  krep=-65
179  GOTO 1001
180 ENDIF
181 !
182 IF (ktronc.LE.0.OR.ktronc.GT.fa%NXTRON) THEN
183  krep=-70
184  GOTO 1001
185 ELSEIF (knlati.LE.0.OR.knlati.GT.fa%NXLATI) THEN
186  krep=-71
187  GOTO 1001
188 ELSEIF (kniver.LE.0.OR.kniver.GT.fa%NXNIVV) THEN
189  krep=-72
190  GOTO 1001
191 ELSEIF (knxlon.LE.0.OR.knxlon.GT.fa%NXLONG) THEN
192  krep=-83
193  GOTO 1001
194 ENDIF
195 
196 IF (llmlam) THEN
197 ! IF (-2*KTYPTR+1.GT.KNXLON) THEN
198 ! KREP=-115
199 ! GOTO 1001
200 ! ELSEIF (2*KTRONC+1.GT.KNLATI) THEN
201 ! KREP=-116
202 ! GOTO 1001
203 ! ENDIF
204 ELSE
205  IF (pcodil.LT.1._jpdblr) THEN
206  krep=-73
207  GOTO 1001
208  ELSEIF (ktyptr.LE.0.OR.ktyptr.GT.fa%NTYPTX) THEN
209  krep=-109
210  GOTO 1001
211  ELSEIF (max(abs(pslapo),abs(pclopo),abs(pslopo)) &
212 & .GT.1._jpdblr) THEN
213  krep=-100
214  GOTO 1001
215  ELSEIF (abs(1._jpdblr-(pclopo**2+pslopo**2)) &
216 & .GT.1.e-5_jpdblr) THEN
217  krep=-101
218  GOTO 1001
219  ELSEIF (2*ktronc+1.GT.knxlon) THEN
220  krep=-84
221  GOTO 1001
222  ELSEIF (2*ktronc+1.GT.4*(knlati/2)) THEN
223 !
224 ! Le test ci-dessus est "dur" car il fait l'hypothese que,
225 ! dans le cas ou KNLATI est impair, la grille comporte les poles.
226 !
227  krep=-79
228  GOTO 1001
229  ENDIF
230 ENDIF
231 !
232 IF (kphase.EQ.1) THEN
233  GOTO 1001
234 ENDIF
235 !**
236 ! 2. - CONTROLE DES TABLEAUX (SYNTAXE ET COHERENCE).
237 ! (et de la pression de reference)
238 !-----------------------------------------------------------------------
239 !
240 200 CONTINUE
241 !
242 !
243 IF (prefer.LT.0._jpdblr.OR. &
244 & prefer.GT.real(10*fa%MPRESX, jpdblr)) THEN
245  krep=-108
246  GOTO 1001
247 ENDIF
248 !
249 ! No Mount Everest test
250 !
251 IF (.false.) THEN
252 DO j=0,kniver
253 iprec=max(0_jplikb ,j-1)
254 zmin=min(pahybr(j),pbhybr(j))
255 zpmin=prefer*pahybr(j)+fa%SPSMIN*pbhybr(j)
256 zpmax=prefer*pahybr(j)+fa%SPSMAX*pbhybr(j)
257 zpminp=prefer*pahybr(iprec)+fa%SPSMIN*pbhybr(iprec)
258 zpmaxp=prefer*pahybr(iprec)+fa%SPSMAX*pbhybr(iprec)
259 !
260 IF (zmin.LT.0._jpdblr.OR.pbhybr(j).GT.1._jpdblr) THEN
261  krep=-80
262  GOTO 1001
263 ELSEIF (j.NE.0.AND.(pbhybr(j).LT.pbhybr(iprec).OR. &
264 & zpmin.LE.zpminp.OR.zpmax.LE.zpmaxp)) THEN
265  krep=-81
266  GOTO 1001
267 ENDIF
268 !
269 ENDDO
270 ENDIF ! No Mount Everest test
271 !
272 IF (.NOT.llmlam) THEN
273 !
274  DO j=1,inpahe
275  iprec=max(1_jplikb ,j-1)
276 !
277  IF (knlopa(j).LE.0.OR.knlopa(j).GT.knxlon) THEN
278  krep=-74
279  GOTO 1001
280  ELSEIF (knlopa(j).LT.knlopa(iprec)) THEN
281  krep=-75
282  GOTO 1001
283  ELSEIF (knozpa(j).LT.0.OR.knozpa(j).GT.ktronc) THEN
284  krep=-76
285  GOTO 1001
286  ELSEIF (knozpa(j).LT.knozpa(iprec)) THEN
287  krep=-77
288  GOTO 1001
289  ELSEIF ((2*knozpa(j)+1).GT.knlopa(j)) THEN
290  krep=-78
291  GOTO 1001
292  ELSEIF (abs(psinla(j)).GT.1._jpdblr) THEN
293  krep=-102
294  GOTO 1001
295  ELSEIF (psinla(j).GE.psinla(iprec).AND.j.NE.1) THEN
296  krep=-103
297  GOTO 1001
298  ENDIF
299 !
300  ENDDO
301 !
302 ELSE
303 !
304 ! ***** ERROR HANDLING FOR LAM CASE
305 !
306  IF (abs(knlopa(2)).GT.1) THEN
307  krep=-117
308  GOTO 1001
309  ELSEIF (knlopa(3).LE.0.OR.knlopa(3).GT.knxlon) THEN
310  krep=-118
311  GOTO 1001
312  ELSEIF (knlopa(4).LT.knlopa(3).OR.knlopa(4).GT.knxlon) THEN
313  krep=-119
314  GOTO 1001
315  ELSEIF (knlopa(5).LE.0.OR.knlopa(5).GT.knlati) THEN
316  krep=-120
317  GOTO 1001
318  ELSEIF (knlopa(6).LE.knlopa(5).OR.knlopa(6).GT.knlati) THEN
319  krep=-121
320  GOTO 1001
321  ELSEIF (2*knlopa(7).GT.(knlopa(4)-knlopa(3))) THEN
322  krep=-122
323  GOTO 1001
324  ELSEIF (2*knlopa(8).GT.(knlopa(6)-knlopa(5))) THEN
325  krep=-123
326  GOTO 1001
327  ENDIF
328 !
329 ENDIF
330 !
331 IF (kphase.EQ.2) GOTO 1001
332 !**
333 ! 3. - CONTROLES LIES A LA DEFINITION DU CADRE PROPREMENT DITE.
334 !-----------------------------------------------------------------------
335 !
336 300 CONTINUE
337 !
338 ! Le nom de cadre specifie est-il deja defini ?
339 !
340 CALL fanuca_fort &
341 & (fa, cdnomc,krangc,.false.)
342 ldredf=krangc.NE.0
343 IF (ldredf) GOTO 500
344 !
345 ! En arrivant ici, il s'agit donc d'un nouveau cadre.
346 !
347 IF (fa%NCADEF.GE.fa%JPNXCA) THEN
348 !
349 ! Trop de cadres deja definis pour en stocker un de plus.
350 !
351  krep=-56
352  GOTO 1001
353 ENDIF
354 !
355 ! Recherche d'un emplacement disponible dans les tables de cadres,
356 ! lequel devrait en bonne logique exister...
357 !
358 DO j=1,fa%JPNXCA
359 !
360 IF (fa%CADRE(j)%CNOMCA.EQ.' ') THEN
361  krangc=j
362  GOTO 303
363 ENDIF
364 !
365 ENDDO
366 !
367 krep=-66
368 GOTO 1001
369 !
370 303 CONTINUE
371 !
372 ! Nouveau cadre, mise a jour des tables partagees de cadres.
373 !
374 fa%NCADEF=fa%NCADEF+1
375 fa%NCAIND(fa%NCADEF)=krangc
376 
377 400 CONTINUE
378 
379 CALL new_cadre (fa%CADRE(krangc), ktyptr, knlati, ktronc, kniver)
380 
381 fa%CADRE(krangc)%CNOMCA=cdnomc
382 fa%CADRE(krangc)%NLCCAD=klnomc
383 !**
384 ! 4. - STOCKAGE DES PARAMETRES DU CADRE (NOUVEAU, OU REDEFINI).
385 !-----------------------------------------------------------------------
386 !
387 fa%CADRE(krangc)%NULCAD=0
388 fa%CADRE(krangc)%NTYPTR=ktyptr
389 fa%CADRE(krangc)%MTRONC=ktronc
390 fa%CADRE(krangc)%NNIVER=kniver
391 fa%CADRE(krangc)%NLATIT=knlati
392 fa%CADRE(krangc)%NXLOPA=knxlon
393 fa%CADRE(krangc)%SSLAPO=pslapo
394 fa%CADRE(krangc)%SCLOPO=pclopo
395 fa%CADRE(krangc)%SSLOPO=pslopo
396 fa%CADRE(krangc)%SCODIL=pcodil
397 fa%CADRE(krangc)%SPREFE=prefer
398 !
399 fa%CADRE(krangc)%LIMLAM=llmlam
400 fa%CADRE(krangc)%NSFLAM=0
401 !
402 IF (.NOT.ldredf.OR.kgarde.NE.1) fa%CADRE(krangc)%NGARDE=kgarde
403 !
404 IF (.NOT.llmlam) THEN
405  icompt=0
406 !
407  DO j=1,inpahe
408  icompt=icompt+knlopa(j)
409  fa%CADRE(krangc)%NLOPAR(j)=knlopa(j)
410  fa%CADRE(krangc)%NOZPAR(j)=knozpa(j)
411  fa%CADRE(krangc)%SINLAT(j)=psinla(j)
412  ENDDO
413 !
414  IF (knlati.EQ.2*inpahe) THEN
415  fa%CADRE(krangc)%NVAPDG=icompt*2
416  ELSE
417  fa%CADRE(krangc)%NVAPDG=icompt*2-knlopa(inpahe)
418  ENDIF
419 !
420 ELSE
421 ! ***** CALCULATION OF KNOZPA(), THEN ALSO SETTING OF FACOM1-TABLES *****
422 !
423  imsmax = -ktyptr
424  isflam = 0
425  CALL ellips64 (ktronc,imsmax,ikntmp,ikmtmp)
426 !DP CALL ELLIPS(IMSMAX,KTRONC,IKNTMP,IKMTMP)
427 !
428 ! Initialisation de FA%NOMPAR (du module FAMODU)
429 !
430  fa%CADRE(krangc)%NOMPAR(2) = 0
431  DO jl=0,imsmax
432  fa%CADRE(krangc)%NOMPAR(2*jl+3) = fa%CADRE(krangc)%NOMPAR(2*jl+2) + 1
433  fa%CADRE(krangc)%NOMPAR(2*jl+4) = fa%CADRE(krangc)%NOMPAR(2*jl+3) &
434 & + 4*(ikntmp(jl)+1) -1
435  ENDDO
436  fa%CADRE(krangc)%NOMPAR(1) = ktronc
437  fa%CADRE(krangc)%NOMPAR(2) = imsmax
438 !
439  DO jl=0,ktronc
440  ik=ikmtmp(jl)
441 !DP IK=IKNTMP(JL)
442  icpl4n(jl)=4*(ik+1)
443  isflam = isflam + 4*(ik+1)
444  ENDDO
445 !
446  iesn0(0)=1
447 !
448  DO j=1,ktronc
449  iesn0(j)=iesn0(j-1)+icpl4n(j-1)
450  ENDDO
451 !
452 ! ----- NOW SETTING OF TABLES -----
453  DO j=1,jnexpl
454  fa%CADRE(krangc)%NLOPAR(j)=knlopa(j)
455  ENDDO
456  fa%CADRE(krangc)%SINLAT = 0._jpdblr
457  DO j=1,jngeom
458  fa%CADRE(krangc)%SINLAT(j)=psinla(j)
459  ENDDO
460  fa%CADRE(krangc)%NOZPAR(1)=ktronc
461  fa%CADRE(krangc)%NOZPAR(2)=imsmax
462 !
463  DO j=0,ktronc
464  fa%CADRE(krangc)%NOZPAR(2*j+3)=iesn0(j)
465  fa%CADRE(krangc)%NOZPAR(2*j+4)=iesn0(j)+icpl4n(j)-1
466  ENDDO
467 
468  IF (fa%CADRE(krangc)%NOZPAR(2*ktronc+4).NE. &
469 & fa%CADRE(krangc)%NOMPAR(2*imsmax+4)) &
470 & THEN
471  krep=-127
472  GOTO 1001
473  ENDIF
474 !
475  fa%CADRE(krangc)%NSFLAM=isflam
476 !
477 ! ***** DETERMINATION OF FA%NVAPDG() *****
478 !
479  fa%CADRE(krangc)%NVAPDG=knlati*knxlon
480 !
481 ENDIF
482 !
483 DO j=0,kniver
484 fa%CADRE(krangc)%SFOHYB(1,j)=pahybr(j)
485 fa%CADRE(krangc)%SFOHYB(2,j)=pbhybr(j)
486 ENDDO
487 !
488 GOTO 1001
489 !**
490 ! 5. - TENTATIVE DE REDEFINITION D'UN CADRE. CONTROLES AD HOC.
491 !-----------------------------------------------------------------------
492 !
493 500 CONTINUE
494 !
495 IF (fa%CADRE(krangc)%MTRONC.NE.ktronc) GOTO 505
496 IF (fa%CADRE(krangc)%NNIVER.NE.kniver) GOTO 505
497 IF (fa%CADRE(krangc)%NLATIT.NE.knlati) GOTO 505
498 IF (fa%CADRE(krangc)%NXLOPA.NE.knxlon) GOTO 505
499 IF (fa%CADRE(krangc)%NTYPTR.NE.ktyptr) GOTO 505
500 IF (abs(real(fa%CADRE(krangc)%SSLAPO, jpdblr)-real(pslapo, jpdblr))>zeps) GOTO 505
501 IF (abs(real(fa%CADRE(krangc)%SCLOPO, jpdblr)-real(pclopo, jpdblr))>zeps) GOTO 505
502 IF (abs(real(fa%CADRE(krangc)%SSLOPO, jpdblr)-real(pslopo, jpdblr))>zeps) GOTO 505
503 IF (abs(real(fa%CADRE(krangc)%SCODIL, jpdblr)-real(pcodil, jpdblr))>zeps) GOTO 505
504 IF (abs(real(fa%CADRE(krangc)%SPREFE, jpdblr)-real(prefer, jpdblr))>zeps) GOTO 505
505 !
506 IF (.NOT.llmlam) THEN
507  DO j=1,inpahe
508  IF (fa%CADRE(krangc)%NLOPAR(j).NE.knlopa(j)) GOTO 505
509  IF (fa%CADRE(krangc)%NOZPAR(j).NE.knozpa(j)) GOTO 505
510  IF (abs(REAL (FA%CADRE(KRANGC)%SINLAT(J), JPDBLR) - REAL (PSINLA(J), JPDBLR))>zeps) goto 505
511  ENDDO
512 ELSE
513  DO j=1,jnexpl
514  IF (fa%CADRE(krangc)%NLOPAR(j).NE.knlopa(j)) GOTO 505
515  ENDDO
516  DO j=1,jngeom
517  IF (abs(REAL (FA%CADRE(KRANGC)%SINLAT(J), JPDBLR)-REAL (PSINLA(J), jpdblr))>zeps) goto 505
518  ENDDO
519 ENDIF
520 !
521 DO j=0,kniver
522 IF (abs(REAL (FA%CADRE(KRANGC)%SFOHYB(1,J), JPDBLR)-REAL (PAHYBR(J), jpdblr))>zeps) goto 505
523 IF (abs(REAL (FA%CADRE(KRANGC)%SFOHYB(2,J), JPDBLR)-REAL (PBHYBR(J), jpdblr))>zeps) goto 505
524 ENDDO
525 !
526 ! Si on arrive ici, il y a redefinition a l'identique,
527 ! du moins pour les parametres numeriques.
528 ! L'option de conservation du cadre peut, elle, etre modifiee
529 ! dans le cas d'une definition non dynamique.
530 !
531 IF (kgarde.NE.1) fa%CADRE(krangc)%NGARDE=kgarde
532 GOTO 1001
533 !
534 505 CONTINUE
535 ldmodc=.true.
536 !
537 ! Il y a donc redefinition avec changement de parametre(s),
538 ! ce qui n'est possible que s'il n'y a pas de fichier rattache,
539 ! et s'il ne s'agit pas d'une definition dynamique de cadre
540 ! (appel par FAITOU avec KGARDE=1).
541 !
542 IF (kgarde.EQ.1) THEN
543  krep=-58
544 ELSEIF (fa%CADRE(krangc)%NULCAD.NE.0) THEN
545  krep=-59
546 ELSE
547  CALL free_cadre (fa%CADRE(krangc))
548  GOTO 400
549 ENDIF
550 !**
551 ! 10. - PHASE TERMINALE : MESSAGERIE EVENTUELLE,
552 ! VIA LE sous-programme "FAIPAR" .
553 !-----------------------------------------------------------------------
554 !
555 1001 CONTINUE
556 !
557 llfata=krep.NE.0.AND.fa%NRFAGA.NE.2
558 !
559 IF (fa%LFAMOP.OR.llfata) THEN
560  inimes=2
561  clnspr='FACADI'
562  inumer=jpniil
563 !
564  IF (krep.EQ.-65.AND.ilcdno.LE.0) THEN
565  ilnomc=8
566  clacti(1:ilnomc)=fa%CHAINC(:ilnomc)
567  ELSE
568  ilnomc=min(klnomc,fa%NCPCAD,int(len(clacti), jplikb))
569  clacti(1:ilnomc)=cdnomc(1:ilnomc)
570  ENDIF
571 !
572  WRITE (unit=clmess,fmt='(''ARGUM.SIMPLES='',I4,'','''''',A, &
573 & '''''''',4('','',F7.4),4('','',I4),'','',F10.3, &
574 & 2('','',L1),2('','',I2),'','',I3,'','',I1)') &
575 & krep,clacti(1:ilnomc),pslapo,pclopo,pslopo,pcodil, &
576 & ktronc,knlati,knxlon,kniver,prefer,ldmodc,ldredf,kphase, &
577 & krangc,klnomc,kgarde
578  CALL faipar_fort &
579 & (fa, inumer,inimes,krep,.false.,clmess, &
580 & clnspr,clacti(1:ilnomc),.false.)
581 ELSEIF (ktronc.LE.fa%NSTROI.AND.(kphase.EQ.0.OR.kphase.EQ.1)) THEN
582  inimes=1
583  clnspr='FACADI'
584  inumer=jpniil
585  ilnomc=min(klnomc,fa%NCPCAD)
586  WRITE (unit=clmess, &
587 & fmt='(''TRONCATURE ('',I2,'') INFERIEURE '', &
588 & ''OU EGALE A LA SOUS-TRONCATURE "NON COMPACTEE" IMPLICITE ('',I2, &
589 & ''), CADRE '''''',A,'''''''')') ktronc,fa%NSTROI,cdnomc(1:ilnomc)
590  CALL faipar_fort &
591 & (fa, inumer,inimes,krep,.false.,clmess, &
592 & clnspr,clacti,.false.)
593 ENDIF
594 !
595 IF (lhook) CALL dr_hook('FACADI_MT',1,zhook_handle)
596 END SUBROUTINE facadi_fort
597 
598 
integer, parameter jplikb
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
integer(kind=jplikb), parameter jnexpl
Definition: fa_mod.F90:29
subroutine fanuca_fort(FA, CDNOMC, KRANGC, LDVERR)
Definition: fanuca.F90:5
Definition: fa_mod.F90:1
subroutine new_cadre(CA, KTYPTR, KPXLAT, KPXTRO, KPXNIV)
Definition: fa_mod.F90:482
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter jpdblr
logical lhook
Definition: yomhook.F90:15
subroutine free_cadre(CA)
Definition: fa_mod.F90:565
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
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31
real8 real
Definition: privpub.h:396