SURFEX v8.1
General documentation of Surfex
faregu.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe FA
3 SUBROUTINE faregu_fort &
4 & (fa, knumer, cdclef, kval, kopt)
5 USE fa_mod, ONLY : fa_com
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Ce sous-programme controle (lecture/ecriture) les options
12 ! de compression de GRIBEX, pour chacune des unites logiques et
13 ! certains descripteurs GRIB communs a l'unite logique.
14 ! (REGLAGE des options de codage de gribex pour une Unite)
15 !**
16 ! Arguments : KNUMER (Entree) ==> Numero de l'unite logique;
17 ! CDCLEF (Entree) ==> Mot clef precisant l'action a faire;
18 ! KVAL (Sortie ==> Valeur lue ou a ecrire;
19 ! ou Entree)
20 ! KOPT (Entree) ==> Flag: 0->lecture 1->ecriture;
21 !*
22 ! Signification des divers elements du tableau NCOGRIF
23 !
24 ! NCOGRIF(1) = type de codage (0->option HOPER='C'
25 ! 1->option HOPER='K')
26 ! NCOGRIF(2) = KSEC4(6), indicateur de la presence de flags
27 ! additionnels (0->non; 16->oui)
28 ! NCOGRIF(3) = KSEC4(7)
29 ! NCOGRIF(4) = KSEC4(9), indicateur de la presence de bitmaps
30 ! secondaires (0->non; 32->oui)
31 ! NCOGRIF(5) = KSEC4(10), indicateur pour le nb de bits des
32 ! groupes de pts de grille (0->const.; 16->different)
33 ! NCOGRIF(6) = KSEC4(11), nb de bits pour les groupes de pts de grille
34 ! quand il est constant.
35 ! Si negatif, le logiciel calcule un nb optimal a partir
36 ! de -KSEC4(11).
37 ! NCOGRIF(7) = KSEC4(12), indicateur pour les extensions generales de
38 ! la compression (0->non; 8->oui)
39 ! NCOGRIF(8) = KSEC4(13), indicateur pour le rearrangement boustrophedo
40 ! nique (0->non; 4->oui)
41 ! NCOGRIF(9) = KSEC4(14) (valeurs possibles: -1, 0 et 2)
42 ! NCOGRIF(10) = KSEC4(15) (valeurs possibles: -1, 0 et 1), sert avec
43 ! KSEC4(14) a definir la technique de la difference
44 ! spatiale. Si l'un des 2 est negatif, l'ordre de
45 ! differentiation est estime dynamiquement, sinon
46 ! l'ordre = KSEC4(14)+KSEC4(15)
47 ! NCOGRIF(11) = 1->Calcul automatique de KSEC1 (23), 0->On laisse faire
48 ! NCODGRI(12) = Ecriture des champs GRIB1 dans un fichier externe
49 !
50 !
51 !
52 TYPE(fa_com) :: FA
53 INTEGER (KIND=JPLIKB) KNUMER, KVAL, KOPT
54 !
55 CHARACTER(LEN=*) CDCLEF
56 !
57 INTEGER (KIND=JPLIKB) IRANG, INIMES, IREP, INBITSMAX
58 !
59 CHARACTER(LEN=FA%JPLMES) CLMESS
60 CHARACTER(LEN=FA%JPLSPX) CLNSPR
61 LOGICAL LLFATA
62 
63 !
64 !**
65 ! 0. - INITIALISATIONS ET ALLOCATIONS PREALABLES
66 !-----------------------------------------------------------------------
67 !
68 REAL(KIND=JPRB) :: ZHOOK_HANDLE
69 IF (lhook) CALL dr_hook('FAREGU_MT',0,zhook_handle)
70 irep=0
71 !
72 CALL fanumu_fort &
73 & (fa, knumer,irang)
74 !
75 IF (irang.EQ.0) THEN
76  irep=-51
77  GOTO 1001
78 ENDIF
79 !
80 ! Appel prealable a FAISC1 pour initialiser FA%NSEC1(2:21,IRANG).
81 ! On le fait ici plutot que dans FAINIG pour ne pas ecraser
82 ! les eventuelles modifs apportees par IDCEN et/ou IDMOD
83 !
84 IF (fa%FICHIER(irang)%LISEC1) THEN
85  CALL faisc1_fort &
86 & (fa, irep,irang)
87  IF (irep.NE.0) THEN
88  WRITE (unit=fa%NULOUT,fmt=*) &
89 & 'FAREGU: ERROR ',irep,' dans appel a FAISC1 !!'
90  GOTO 1001
91  ENDIF
92  fa%FICHIER(irang)%LISEC1=.false.
93 ENDIF
94 !
95 inbitsmax=max(fa%FICHIER(irang)%NBFPDG,fa%FICHIER(irang)%NBFCSP)
96 !**
97 ! 1. - SPECIFICATION D'UN NOUVEAU CODAGE
98 !-----------------------------------------------------------------------
99 !
100 IF (kopt==1) THEN
101 !
102 ! Pas de compression (sous-tronc et puissance laplacien ajoutees
103 ! systematiquement + tard pour les coeff spectraux)
104 !
105  IF (cdclef=='BASIC'.OR.cdclef=='basic') THEN
106  fa%FICHIER(irang)%NCOGRIF(1)=0
107  fa%FICHIER(irang)%NCOGRIF(2)=0
108  fa%FICHIER(irang)%NCOGRIF(3)=0
109  fa%FICHIER(irang)%NCOGRIF(4)=0
110  fa%FICHIER(irang)%NCOGRIF(5)=0
111  fa%FICHIER(irang)%NCOGRIF(6)=0
112 !
113 ! Comme le "BASIC" avec une compression
114 ! ligne a ligne pour les points de grille
115 !
116  ELSEIF (cdclef=='PACK1'.OR.cdclef=='pack1') THEN
117  fa%FICHIER(irang)%NCOGRIF(1)=0
118  fa%FICHIER(irang)%NCOGRIF(2)=16
119  fa%FICHIER(irang)%NCOGRIF(3)=0
120  fa%FICHIER(irang)%NCOGRIF(4)=0
121  fa%FICHIER(irang)%NCOGRIF(5)=16
122  fa%FICHIER(irang)%NCOGRIF(6)=0
123 !
124 ! Comme le "BASIC" avec une compression
125 ! pour les points de grille ou le nb de bits est le meme
126 ! dans chaque groupe de points de grille
127 !
128  ELSEIF (cdclef=='PACK2'.OR.cdclef=='pack2') THEN
129  fa%FICHIER(irang)%NCOGRIF(1)=0
130  fa%FICHIER(irang)%NCOGRIF(2)=16
131  fa%FICHIER(irang)%NCOGRIF(3)=0
132  fa%FICHIER(irang)%NCOGRIF(4)=32
133  fa%FICHIER(irang)%NCOGRIF(5)=0
134 ! Un nb de bits optimal sera recherche par le logiciel
135  fa%FICHIER(irang)%NCOGRIF(6)=-99
136 !
137 ! Comme le "BASIC" avec une compression general OMM
138 ! pour les points de grille
139 !
140  ELSEIF (cdclef=='PACK3'.OR.cdclef=='pack3') THEN
141  fa%FICHIER(irang)%NCOGRIF(1)=0
142  fa%FICHIER(irang)%NCOGRIF(2)=16
143  fa%FICHIER(irang)%NCOGRIF(3)=0
144  fa%FICHIER(irang)%NCOGRIF(4)=32
145  fa%FICHIER(irang)%NCOGRIF(5)=16
146  fa%FICHIER(irang)%NCOGRIF(6)=0
147 !
148 ! Compression "aggressive": le logiciel va
149 ! tenter la compression ligne a ligne puis l'absence
150 ! de compression et retenir la meilleure methode
151 !
152  ELSEIF (cdclef=='APAC1'.OR.cdclef=='apac1') THEN
153  fa%FICHIER(irang)%NCOGRIF(1)=1
154  fa%FICHIER(irang)%NCOGRIF(2)=16
155  fa%FICHIER(irang)%NCOGRIF(3)=0
156  fa%FICHIER(irang)%NCOGRIF(4)=0
157  fa%FICHIER(irang)%NCOGRIF(5)=16
158  fa%FICHIER(irang)%NCOGRIF(6)=0
159 !
160 ! Compression "aggressive": le logiciel va
161 ! tenter la compression type "APAC1" puis celle avec le nb de bits
162 ! constant par groupe de pts de grille et retenir la meilleure
163 !
164  ELSEIF (cdclef=='APAC2'.OR.cdclef=='apac2') THEN
165  fa%FICHIER(irang)%NCOGRIF(1)=1
166  fa%FICHIER(irang)%NCOGRIF(2)=16
167  fa%FICHIER(irang)%NCOGRIF(3)=0
168  fa%FICHIER(irang)%NCOGRIF(4)=0
169  fa%FICHIER(irang)%NCOGRIF(5)=0
170 ! Un nb de bits optimal sera recherche par le logiciel
171  fa%FICHIER(irang)%NCOGRIF(6)=-99
172 !
173 ! Compression "aggressive": le logiciel va tenter
174 ! la compression type "APAC1" puis la compression generale
175 ! OMM et retenir la meilleure
176 !
177  ELSEIF (cdclef=='APAC3'.OR.cdclef=='apac3') THEN
178  fa%FICHIER(irang)%NCOGRIF(1)=1
179  fa%FICHIER(irang)%NCOGRIF(2)=16
180  fa%FICHIER(irang)%NCOGRIF(3)=0
181  fa%FICHIER(irang)%NCOGRIF(4)=32
182  fa%FICHIER(irang)%NCOGRIF(5)=16
183  fa%FICHIER(irang)%NCOGRIF(6)=0
184 !
185 ! Compression "aggressive": le logiciel va
186 ! tenter la compression type "APAC3" puis celle avec le nb de bits
187 ! constant par groupe de pts de grille et retenir la meilleure
188 !
189  ELSEIF (cdclef=='APAC4'.OR.cdclef=='apac4') THEN
190  fa%FICHIER(irang)%NCOGRIF(1)=1
191  fa%FICHIER(irang)%NCOGRIF(2)=16
192  fa%FICHIER(irang)%NCOGRIF(3)=0
193  fa%FICHIER(irang)%NCOGRIF(4)=32
194  fa%FICHIER(irang)%NCOGRIF(5)=0
195 ! Un nb de bits optimal sera recherche par le logiciel
196  fa%FICHIER(irang)%NCOGRIF(6)=-99
197 !
198 ! Specification du nb de bits a utiliser dans le cadre
199 ! de la compression avec nb de bits constant
200 ! par groupe de pts de grille
201 !
202  ELSEIF (cdclef=='WIDPA'.OR.cdclef=='widpa') THEN
203  IF (kval.LT.1-inbitsmax.OR.kval.GT.inbitsmax-1) THEN
204  irep=-97
205  WRITE (unit=fa%NULOUT,fmt='(A)')'Dans FAREGU, action WIDPA:'
206  WRITE (unit=fa%NULOUT,fmt='(A57,I8)') &
207 & '!! ERREUR !! Valeur incorrecte, non prise en compte: ',kval
208  GOTO 1001
209  ENDIF
210  fa%FICHIER(irang)%NCOGRIF(6)=kval
211 !
212 ! Demande supplementaire de la compression avec extension
213 ! generale a la norme OMM (si KVAL=1, sinon c'est le retrait de l'option)
214 !
215  ELSEIF (cdclef=='GEXTE'.OR.cdclef=='gexte') THEN
216  IF (kval.EQ.1) THEN
217  fa%FICHIER(irang)%IOPTGRSX2O=1
218  fa%FICHIER(irang)%NCOGRIF(7)=8
219  ELSE
220  fa%FICHIER(irang)%NCOGRIF(7)=0
221  ENDIF
222 !
223 ! Demande supplementaire du rearrangement boustrophedonique dans la compression
224 ! (si KVAL=1, sinon c'est le retrait de cette option)
225 !
226  ELSEIF (cdclef=='BOUST'.OR.cdclef=='boust') THEN
227  IF (kval.EQ.1) THEN
228  fa%FICHIER(irang)%IOPTGRSX2O=1
229  fa%FICHIER(irang)%NCOGRIF(8)=4
230  ELSE
231  fa%FICHIER(irang)%NCOGRIF(8)=0
232  ENDIF
233 !
234 ! Demande supplementaire de la difference spatiale dans la
235 ! compression. KVAL donne l'ordre de differentiation
236 ! (-1-> calcul dynamique par GRIBEX; 1 a 3->ordre; 0->desactiv; autre->err)
237 !
238  ELSEIF (cdclef=='DIFFE'.OR.cdclef=='diffe') THEN
239  IF (kval.EQ.-1) THEN
240  fa%FICHIER(irang)%IOPTGRSX2O=1
241  fa%FICHIER(irang)%IOPTGRSN2O=1
242  fa%FICHIER(irang)%NCOGRIF( 9)=0
243  fa%FICHIER(irang)%NCOGRIF(10)=-1
244  ELSEIF (kval.EQ.1) THEN
245  fa%FICHIER(irang)%IOPTGRSX2O=1
246  fa%FICHIER(irang)%IOPTGRSN2O=1
247  fa%FICHIER(irang)%NCOGRIF( 9)=0
248  fa%FICHIER(irang)%NCOGRIF(10)=1
249  ELSEIF (kval.EQ.2) THEN
250  fa%FICHIER(irang)%IOPTGRSX2O=1
251  fa%FICHIER(irang)%IOPTGRSN2O=1
252  fa%FICHIER(irang)%NCOGRIF( 9)=2
253  fa%FICHIER(irang)%NCOGRIF(10)=0
254  ELSEIF (kval.EQ.3) THEN
255  fa%FICHIER(irang)%IOPTGRSX2O=1
256  fa%FICHIER(irang)%IOPTGRSN2O=1
257  fa%FICHIER(irang)%NCOGRIF( 9)=2
258  fa%FICHIER(irang)%NCOGRIF(10)=1
259  ELSEIF (kval.EQ.0) THEN
260  fa%FICHIER(irang)%IOPTGRSX2O=0
261  fa%FICHIER(irang)%NCOGRIF( 9)=0
262  fa%FICHIER(irang)%NCOGRIF(10)=0
263  ELSE
264  irep=-125
265  WRITE (unit=fa%NULOUT,fmt='(A)') &
266 & 'Dans FAREGU, action DIFFE:'
267  WRITE (unit=fa%NULOUT,fmt='(A57,I8)') &
268 & '!! ERREUR !! Valeur incorrecte, non prise en compte: ',kval
269  GOTO 1001
270  ENDIF
271 !
272 ! Specification de l'identificateur du centre meteo (defaut=85 pour
273 ! Toulouse; pour Reading, il vaut 98). Sera utilise pour initialiser
274 ! KSEC1(2), le 2ieme elt de la section 1 de GRIBEX
275 !
276  ELSEIF (cdclef=='IDCEN'.OR.cdclef=='idcen') THEN
277  IF (kval.LT.7.OR.kval.GT.99) THEN
278  irep=-125
279  WRITE (unit=fa%NULOUT,fmt='(A)') &
280 & 'Dans FAREGU, action IDCEN:'
281  WRITE (unit=fa%NULOUT,fmt='(A57,I8)') &
282 & '!! ERREUR !! Valeur incorrecte, non prise en compte: ',kval
283  GOTO 1001
284  ENDIF
285  fa%FICHIER(irang)%NSEC1(2) = kval
286  fa%FICHIER(irang)%NIDCEN = kval
287 
288 !
289 ! Specification de l'identificateur de modele.
290 ! FAISC1 initialise automatiquement a
291 ! 177 pour ALADIN
292 ! 211 pour les previsions ARPEGE
293 ! 201 pour les analyses ARPEGE
294 ! Sera utilise pour initialiser KSEC1(3).
295 !
296  ELSEIF (cdclef=='IDMOD'.OR.cdclef=='idmod') THEN
297  IF (kval.LT.0.OR.kval.GT.255) THEN
298  irep=-125
299  WRITE (unit=fa%NULOUT,fmt='(A)') &
300 & 'Dans FAREGU, action IDMOD:'
301  WRITE (unit=fa%NULOUT,fmt='(A57,I8)') &
302 & '!! ERREUR !! Valeur incorrecte, non prise en compte: ',kval
303  GOTO 1001
304  ENDIF
305  fa%FICHIER(irang)%NSEC1(3)=kval
306  ELSEIF (cdclef(1:min(7, len(cdclef)))=='CMODEL=') THEN
307  fa%FICHIER(irang)%CMODEL = cdclef(8:)
308 !
309 ! Facteur decimal; calcul automatique
310 !
311  ELSEIF (cdclef=='FACDEC'.OR.cdclef=='facdec') THEN
312  fa%FICHIER(irang)%NCOGRIF(11)=kval
313 !
314 ! Ecriture dans un fichier externe
315 !
316  ELSEIF (cdclef=='EXTERN'.OR.cdclef=='extern') THEN
317  fa%FICHIER(irang)%NCOGRIF(12)=kval
318  ELSE
319  irep=-125
320  WRITE (unit=fa%NULOUT,fmt='(A)') &
321 & '!! ERREUR !! Dans FAREGU, action inconnue: '//cdclef
322  GOTO 1001
323  ENDIF
324 !**
325 ! 2. - DEMANDE D'INFORMATION
326 !-----------------------------------------------------------------------
327 !
328 ELSEIF (kopt==0) THEN
329 !
330 ! Obtention des mots-clef disponibles
331 !
332  IF (cdclef=='CLEFS'.OR. cdclef=='clefs' .OR. &
333 & cdclef=='HELP' .OR. cdclef=='help') THEN
334  kval=0
335  WRITE (unit=fa%NULOUT,fmt=*)
336  WRITE (unit=fa%NULOUT,fmt=*) 'Mots clef disponibles pour FAREGU:'
337  WRITE (unit=fa%NULOUT,fmt=*)
338  WRITE (unit=fa%NULOUT,fmt=*) 'BASIC: pas de compression'
339  WRITE (unit=fa%NULOUT,fmt=*) 'PACK1: BASIC avec une compression'
340  WRITE (unit=fa%NULOUT,fmt=*) ' ligne a ligne pour les pts de grille'
341  WRITE (unit=fa%NULOUT,fmt=*) 'PACK2: BASIC avec une compression avec'
342  WRITE (unit=fa%NULOUT,fmt=*) ' nb de bits cst pour les groupes'
343  WRITE (unit=fa%NULOUT,fmt=*) 'PACK3: BASIC avec une compression generale'
344  WRITE (unit=fa%NULOUT,fmt=*) ' OMM pour les points de grille'
345  WRITE (unit=fa%NULOUT,fmt=*) 'APAC1: compression agressive:'
346  WRITE (unit=fa%NULOUT,fmt=*) ' BASIC et PACK1 sont testes'
347  WRITE (unit=fa%NULOUT,fmt=*) 'APAC2: compression agressive:'
348  WRITE (unit=fa%NULOUT,fmt=*) ' BASIC, PACK1 et PACK2 sont testes'
349  WRITE (unit=fa%NULOUT,fmt=*) 'APAC3: compression agressive:'
350  WRITE (unit=fa%NULOUT,fmt=*) ' BASIC, PACK1 et PACK3 sont testes'
351  WRITE (unit=fa%NULOUT,fmt=*) 'APAC4: compression agressive:'
352  WRITE (unit=fa%NULOUT,fmt=*) ' BASIC, PACK1, PACK2 et PACK3 testes'
353  WRITE (unit=fa%NULOUT,fmt=*) 'WIDPA: lecture/ecriture du nb de bits'
354  WRITE (unit=fa%NULOUT,fmt=*) ' a utiliser pour les groupes de points'
355  WRITE (unit=fa%NULOUT,fmt=*) ' de grille dans le cas PACK2'
356  WRITE (unit=fa%NULOUT,fmt=*) 'GEXTE: la compression avec extensions generales'
357  WRITE (unit=fa%NULOUT,fmt=*) ' activees (KVAL=1) ou desactivees (KVAL=0)'
358  WRITE (unit=fa%NULOUT,fmt=*) 'BOUST: le rearrangement boustrophedonique est'
359  WRITE (unit=fa%NULOUT,fmt=*) ' active (KVAL=1) ou desactive (KVAL=0)'
360  WRITE (unit=fa%NULOUT,fmt=*) 'DIFFE: la differenciation spatiale est'
361  WRITE (unit=fa%NULOUT,fmt=*) ' activee (KVAL=ordre de differ. (1 a 3)'
362  WRITE (unit=fa%NULOUT,fmt=*) ' ou -1 (calcul dyn)) ou desactivee (0)'
363  WRITE (unit=fa%NULOUT,fmt=*) 'IDCEN: lect/ecriture de l''identificateur du'
364  WRITE (unit=fa%NULOUT,fmt=*) ' centre meteo'
365  WRITE (unit=fa%NULOUT,fmt=*) 'IDMOD: lect/ecriture de l''identificateur du'
366  WRITE (unit=fa%NULOUT,fmt=*) ' modele'
367  WRITE (unit=fa%NULOUT,fmt=*) 'CMODEL: lect/ecriture de l''identificateur du'
368  WRITE (unit=fa%NULOUT,fmt=*) ' modele'
369  WRITE (unit=fa%NULOUT,fmt=*) 'FACDEC: calcul automatique du facteur decimal'
370  WRITE (unit=fa%NULOUT,fmt=*) 'EXTERN: ecriture dans un fichier externe'
371  WRITE (unit=fa%NULOUT,fmt=*)
372 !
373 ! Lecture du nb de bits a utiliser dans le cadre
374 ! de la compression avec nb de bits
375 ! constant par groupe de pts de grille
376 !
377  ELSEIF (cdclef=='WIDPA'.OR.cdclef=='widpa') THEN
378  kval=fa%FICHIER(irang)%NCOGRIF(6)
379 !
380 ! Lecture de la presence ou non de la compression
381 ! "general extended"
382 !
383  ELSEIF (cdclef=='GEXTE'.OR.cdclef=='gexte') THEN
384  kval = fa%FICHIER(irang)%NCOGRIF(7)/8
385 !
386 ! Lecture de la presence ou non du rearrangement
387 ! boustrophedonique.
388 !
389  ELSEIF (cdclef=='BOUST'.OR.cdclef=='boust') THEN
390  kval = fa%FICHIER(irang)%NCOGRIF(8)/4
391 !
392 ! Lecture de la presence ou non de la differentiation spatiale
393 !
394  ELSEIF (cdclef=='DIFFE'.OR.cdclef=='diffe') THEN
395  kval=fa%FICHIER(irang)%NCOGRIF( 9)+fa%FICHIER(irang)%NCOGRIF(10)
396 !
397 ! Lecture de l'identificateur du centre meteo (defaut=85 pour
398 ! Toulouse; pour Reading, il vaut 98). Sera utilise pour initialiser
399 ! KSEC1(2), le 2ieme elt de la section 1 de GRIBEX
400 !
401  ELSEIF (cdclef=='IDCEN'.OR.cdclef=='idcen') THEN
402  kval=fa%FICHIER(irang)%NIDCEN
403 !
404 ! Lecture de l'identificateur du modele
405 !
406  ELSEIF (cdclef=='IDMOD'.OR.cdclef=='idmod') THEN
407  kval=fa%FICHIER(irang)%NSEC1(3)
408  ELSEIF (cdclef(1:min(7, len(cdclef)))=='CMODEL=') THEN
409  cdclef(8:) = fa%FICHIER(irang)%CMODEL
410 !
411 ! Facteur decimal; calcul automatique
412 !
413  ELSEIF (cdclef=='FACDEC'.OR.cdclef=='facdec') THEN
414  kval=fa%FICHIER(irang)%NCOGRIF(11)
415 !
416 ! Ecriture dans un fichier externe
417 !
418  ELSEIF (cdclef=='EXTERN'.OR.cdclef=='extern') THEN
419  kval=fa%FICHIER(irang)%NCOGRIF(12)
420  ELSE
421  irep=-125
422  WRITE (unit=fa%NULOUT,fmt='(A)') &
423 & '!! ERREUR !! Dans FAREGU, action inconnue: '//cdclef
424  GOTO 1001
425  ENDIF
426 !**
427 ! 3. - OPTION INCONNUE
428 !-----------------------------------------------------------------------
429 !
430 ELSE
431  irep=-125
432  WRITE (unit=fa%NULOUT,fmt='(A57,I8)') &
433 & '!! ERREUR !! Dans FAREGU, option inconnue: KOPT= ',kopt
434  GOTO 1001
435 ENDIF
436 !**
437 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
438 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
439 !-----------------------------------------------------------------------
440 !
441 1001 CONTINUE
442 llfata=llmoer(irep,irang)
443 !
444 IF (llfata) THEN
445  inimes=2
446 ELSE
447  inimes=ixnvms(irang)
448 ENDIF
449 !
450 IF (.NOT.llfata.AND.inimes.NE.2) THEN
451  IF (lhook) CALL dr_hook('FAREGU_MT',1,zhook_handle)
452  RETURN
453 ENDIF
454 !
455 clnspr='FAREGU'
456 !
457 WRITE (unit=clmess,fmt='(''IREP='',I4,'', KNUMER='',I3, &
458 & '', CDCLEF='''''',A,'''''', KVAL='',I12, &
459 & '', KOPT='',I4)') &
460 & irep,knumer,cdclef,kval,kopt
461 CALL faipar_fort &
462 & (fa, knumer,inimes,irep,llfata,clmess, &
463 & clnspr,clnspr,.false.)
464 !
465 IF (lhook) CALL dr_hook('FAREGU_MT',1,zhook_handle)
466 
467 CONTAINS
468 
469 #include "facom2.llmoer.h"
470 #include "facom2.ixnvms.h"
471 
472 END SUBROUTINE faregu_fort
473 
474 
475 
476 ! Oct-2012 P. Marguinaud 64b LFI
477 SUBROUTINE faregu64 &
478 & (knumer, cdclef, kval, kopt)
479 USE fa_mod, ONLY : fa => fa_com_default, &
482 USE lfi_precision
483 IMPLICIT NONE
484 ! Arguments
485 INTEGER (KIND=JPLIKB) KNUMER ! IN
486 CHARACTER (LEN=*) CDCLEF ! IN
487 INTEGER (KIND=JPLIKB) KVAL ! INOUT
488 INTEGER (KIND=JPLIKB) KOPT ! IN
489 
490 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
491 
492 CALL faregu_fort &
493 & (fa, knumer, cdclef, kval, kopt)
494 
495 END SUBROUTINE faregu64
496 
497 SUBROUTINE faregu &
498 & (knumer, cdclef, kval, kopt)
499 USE fa_mod, ONLY : fa => fa_com_default, &
502 USE lfi_precision
503 IMPLICIT NONE
504 ! Arguments
505 INTEGER (KIND=JPLIKM) KNUMER ! IN
506 CHARACTER (LEN=*) CDCLEF ! IN
507 INTEGER (KIND=JPLIKM) KVAL ! INOUT
508 INTEGER (KIND=JPLIKM) KOPT ! IN
509 
510 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
511 
512 CALL faregu_mt &
513 & (fa, knumer, cdclef, kval, kopt)
514 
515 END SUBROUTINE faregu
516 
517 SUBROUTINE faregu_mt &
518 & (fa, knumer, cdclef, kval, kopt)
519 USE fa_mod, ONLY : fa_com
520 USE lfi_precision
521 IMPLICIT NONE
522 ! Arguments
523 type(fa_com) fa ! INOUT
524 INTEGER (KIND=JPLIKM) KNUMER ! IN
525 CHARACTER (LEN=*) CDCLEF ! IN
526 INTEGER (KIND=JPLIKM) KVAL ! INOUT
527 INTEGER (KIND=JPLIKM) KOPT ! IN
528 ! Local integers
529 INTEGER (KIND=JPLIKB) INUMER ! IN
530 INTEGER (KIND=JPLIKB) IVAL ! INOUT
531 INTEGER (KIND=JPLIKB) IOPT ! IN
532 ! Convert arguments
533 
534 inumer = int( knumer, jplikb)
535 IF (kopt==1) THEN
536  ival = int( kval, jplikb)
537 ENDIF
538 iopt = int( kopt, jplikb)
539 
540 CALL faregu_fort &
541 & (fa, inumer, cdclef, ival, iopt)
542 
543 IF (kopt==0) THEN
544  kval = int( ival, jplikm)
545 ENDIF
546 
547 END SUBROUTINE faregu_mt
548 
549 !INTF KNUMER IN
550 !INTF CDCLEF IN
551 !INTF KVAL INOUT IN_IF=KOPT==1 OUT_IF=KOPT==0
552 !INTF KOPT IN
553 
integer, parameter jplikb
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine new_fa_default()
Definition: fa_mod.F90:649
Definition: fa_mod.F90:1
subroutine faregu(KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:499
integer, parameter jprb
Definition: parkind1.F90:32
subroutine faregu_fort(FA, KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:5
subroutine faregu_mt(FA, KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:519
logical lhook
Definition: yomhook.F90:15
subroutine faregu64(KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:479
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
subroutine faisc1_fort(FA, KREP, KRANG)
Definition: faisc1.F90:5
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5