SURFEX v8.1
General documentation of Surfex
fagiot.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 fagiot_fort &
4 & (fa, kngrib, knarg1, knarg2, knarg3, knarg4, &
5 & knarg5)
6 USE fa_mod, ONLY : fa_com, jpniil
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Ce sous-programme permet de modifier les options implicites
13 ! liees au codage GRIB des champs.
14 ! CES OPTIONS NE SONT UTILISEES QUE POUR (RE)ECRIRE DES CHAMPS
15 ! codes en GRIB, et les nouvelles valeurs implicites ne serviront
16 ! que LORS d'une OUVERTURE de FICHIER ULTERIEURE.
17 ! ( Grib, Implicites Options Techniques )
18 !**
19 ! Arguments : KNGRIB (Entree) ==> Niveau de codage GRIB (-1,0,1,2,3);
20 ! KNARG1 (Entree) ==> Nombre de bits par valeur point-
21 ! de-grille;
22 ! KNARG2 (Entree) ==> Nombre de bits par partie reelle/
23 ! imaginaire de coeff. spectral;
24 ! KNARG3 (Entree) ==> Sous-troncature non compactee;
25 ! KNARG4 (Entree) ==> Puissance de laplacien;
26 ! KNARG5 (Entree) ==> Degre de modulation de KNARG4.
27 !
28 ! N.B.: Il doit y avoir coherence vis-a-vis des cadres deja definis
29 ! et vis-a-vis des limites usagers.
30 ! ( ce qui en pratique, ne concerne que KNARG3 )
31 !
32 ! Remarque: KNARG3 egal a -1 est accepte, et dans ce cas
33 ! on indexera (a chaque ouverture de fichier) la sous-
34 ! troncature effective sur la troncature.
35 !
36 ! MODIF 30/03/2007 JM AUDOIN FA%LFAMOP pour limiter IMPRESSION
37 !
38 !
39 !
40 TYPE(fa_com) :: FA
41 INTEGER (KIND=JPLIKB) KNGRIB, KNARG1, KNARG2
42 INTEGER (KIND=JPLIKB) KNARG3, KNARG4, KNARG5
43 !
44 INTEGER (KIND=JPLIKB) IMINIM, IREP, INIMES
45 INTEGER (KIND=JPLIKB) INUMER, J, IRANGC
46 !
47 LOGICAL LLVERG
48 !
49 !
50 !
51 CHARACTER(LEN=FA%JPXNOM) CLACTI
52 CHARACTER(LEN=FA%JPLMES) CLMESS
53 CHARACTER(LEN=FA%JPLSPX) CLNSPR
54 LOGICAL LLFATA
55 
56 !**
57 ! 1. - CONTROLES ET INITIALISATIONS.
58 !-----------------------------------------------------------------------
59 !
60 REAL(KIND=JPRB) :: ZHOOK_HANDLE
61 IF (lhook) CALL dr_hook('FAGIOT_MT',0,zhook_handle)
62 clacti=''
63 IF (fa%FAGIOT_LLPREA) THEN
64 !
65 ! A la premiere utilisation, appel au sous-programme "FARINE".
66 !
67  CALL farine_fort &
68 & (fa, 2_jplikb )
69  fa%FAGIOT_LLPREA=.false.
70 ENDIF
71 !
72 llverg=.false.
73 iminim=min(2+kngrib,2+knarg1,2+knarg2,2+knarg3,1+knarg5)
74 !
75 IF (iminim.LE.0) THEN
76  irep=-64
77  GOTO 1001
78 ELSEIF (knarg1*knarg2.EQ.0) THEN
79  irep=-64
80  GOTO 1001
81 ELSEIF (kngrib.GT.3 .AND. .NOT. falgra(kngrib)) THEN
82  irep=-96
83  GOTO 1001
84 ELSEIF (max(knarg1,knarg2).GT.fa%NBIMAX) THEN
85  irep=-97
86  GOTO 1001
87 ELSEIF (abs(knarg4).GT.2**15-1) THEN
88  irep=-98
89  GOTO 1001
90 ENDIF
91 !
92 ! Verrouillage global eventuel.
93 !
94 IF (fa%LFAMUL) CALL lfiver_fort &
95 & (fa%LFI, fa%VRGLAS,'ON')
96 llverg=fa%LFAMUL
97 !
98 IF (knarg3.GE.fa%NXTRON) THEN
99  irep=-113
100  GOTO 1001
101 ENDIF
102 !
103 ! Coherence de "KNARG3" vis-a-vis de la troncature des cadres
104 ! deja definis.
105 !
106 DO j=1,fa%NCADEF
107 irangc=fa%NCAIND(j)
108 !
109 IF (knarg3.GE.fa%CADRE(irangc)%MTRONC) THEN
110  irep=-99
111  GOTO 1001
112 ENDIF
113 !
114 ENDDO
115 !**
116 ! 2. - STOCKAGE DES NOUVEAUX PARAMETRES.
117 !-----------------------------------------------------------------------
118 !
119 IF (fa%LFAMOP.AND.(fa%NIGRIB.EQ.-1.OR.fa%NIGRIB.EQ.3).AND. &
120 & (kngrib.GT.-1.AND.kngrib.LT.3)) THEN
121  WRITE (unit=fa%NULOUT,fmt=*)'-----------------'
122  WRITE (unit=fa%NULOUT,fmt=*) &
123 & 'FAGIOT: CAUTION!! Les champs spectraux ARPEGE ne', &
124 & ' devront pas etre ranges comme dans le modele ARPEGE'
125  WRITE (unit=fa%NULOUT,fmt=*)'-----------------'
126 ENDIF
127 IF (fa%LFAMOP.AND.(kngrib.EQ.-1.OR.kngrib.EQ.3).AND. &
128 & (fa%NIGRIB.GT.-1.AND.fa%NIGRIB.LT.3)) THEN
129  WRITE (unit=fa%NULOUT,fmt=*)'-----------------'
130  WRITE (unit=fa%NULOUT,fmt=*) &
131 & 'FAGIOT: CAUTION!! Les champs spectraux ARPEGE devront', &
132 & ' etre ranges comme dans le modele ARPEGE'
133  WRITE (unit=fa%NULOUT,fmt=*)'-----------------'
134 ENDIF
135 fa%NIGRIB=kngrib
136 fa%NBIPDG=knarg1
137 fa%NBICSP=knarg2
138 fa%NSTROI=knarg3
139 fa%NPUILA=knarg4
140 fa%NMIDPL=knarg5
141 irep=0
142 !**
143 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
144 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
145 !-----------------------------------------------------------------------
146 !
147 1001 CONTINUE
148 llfata=llmoer(irep,0_jplikb )
149 !
150 ! Deverrouillage global eventuel.
151 !
152 IF (llverg) CALL lfiver_fort &
153 & (fa%LFI, fa%VRGLAS,'OFF')
154 !
155 IF (llfata) THEN
156  inimes=2
157 ELSE
158  inimes=fa%NIMSGA
159 ENDIF
160 !
161 IF (.NOT.llfata.AND.inimes.NE.2) THEN
162  IF (lhook) CALL dr_hook('FAGIOT_MT',1,zhook_handle)
163  RETURN
164 ENDIF
165 !
166 clnspr='FAGIOT'
167 !
168 WRITE (unit=clmess,fmt='(''KNGRIB='',I2,'', KNARG1='',I3, &
169 & '', KNARG2='',I3,'', KNARG3='',I2,'', KNARG4='',I3, &
170 & '', KNARG5='',I3)') &
171 & kngrib,knarg1,knarg2,knarg3,knarg4,knarg5
172 inumer=jpniil
173 CALL faipar_fort &
174 & (fa, inumer,inimes,irep,llfata,clmess, &
175 & clnspr,clacti,.false.)
176 !
177 IF (lhook) CALL dr_hook('FAGIOT_MT',1,zhook_handle)
178 
179 CONTAINS
180 
181 #include "facom2.llmoer.h"
182 #include "falgra.h"
183 
184 END SUBROUTINE fagiot_fort
185 
186 
187 
188 ! Oct-2012 P. Marguinaud 64b LFI
189 SUBROUTINE fagiot64 &
190 & (kngrib, knarg1, knarg2, knarg3, knarg4, knarg5)
191 USE fa_mod, ONLY : fa => fa_com_default, &
194 USE lfi_precision
195 IMPLICIT NONE
196 ! Arguments
197 INTEGER (KIND=JPLIKB) KNGRIB ! IN
198 INTEGER (KIND=JPLIKB) KNARG1 ! IN
199 INTEGER (KIND=JPLIKB) KNARG2 ! IN
200 INTEGER (KIND=JPLIKB) KNARG3 ! IN
201 INTEGER (KIND=JPLIKB) KNARG4 ! IN
202 INTEGER (KIND=JPLIKB) KNARG5 ! IN
203 
204 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
205 
206 CALL fagiot_fort &
207 & (fa, kngrib, knarg1, knarg2, knarg3, knarg4, knarg5)
208 
209 END SUBROUTINE fagiot64
210 
211 SUBROUTINE fagiot &
212 & (kngrib, knarg1, knarg2, knarg3, knarg4, knarg5)
213 USE fa_mod, ONLY : fa => fa_com_default, &
216 USE lfi_precision
217 IMPLICIT NONE
218 ! Arguments
219 INTEGER (KIND=JPLIKM) KNGRIB ! IN
220 INTEGER (KIND=JPLIKM) KNARG1 ! IN
221 INTEGER (KIND=JPLIKM) KNARG2 ! IN
222 INTEGER (KIND=JPLIKM) KNARG3 ! IN
223 INTEGER (KIND=JPLIKM) KNARG4 ! IN
224 INTEGER (KIND=JPLIKM) KNARG5 ! IN
225 
226 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
227 
228 CALL fagiot_mt &
229 & (fa, kngrib, knarg1, knarg2, knarg3, knarg4, knarg5)
230 
231 END SUBROUTINE fagiot
232 
233 SUBROUTINE fagiot_mt &
234 & (fa, kngrib, knarg1, knarg2, knarg3, knarg4, knarg5)
235 USE fa_mod, ONLY : fa_com
236 USE lfi_precision
237 IMPLICIT NONE
238 ! Arguments
239 type(fa_com) fa ! INOUT
240 INTEGER (KIND=JPLIKM) KNGRIB ! IN
241 INTEGER (KIND=JPLIKM) KNARG1 ! IN
242 INTEGER (KIND=JPLIKM) KNARG2 ! IN
243 INTEGER (KIND=JPLIKM) KNARG3 ! IN
244 INTEGER (KIND=JPLIKM) KNARG4 ! IN
245 INTEGER (KIND=JPLIKM) KNARG5 ! IN
246 ! Local integers
247 INTEGER (KIND=JPLIKB) INGRIB ! IN
248 INTEGER (KIND=JPLIKB) INARG1 ! IN
249 INTEGER (KIND=JPLIKB) INARG2 ! IN
250 INTEGER (KIND=JPLIKB) INARG3 ! IN
251 INTEGER (KIND=JPLIKB) INARG4 ! IN
252 INTEGER (KIND=JPLIKB) INARG5 ! IN
253 ! Convert arguments
254 
255 ingrib = int( kngrib, jplikb)
256 inarg1 = int( knarg1, jplikb)
257 inarg2 = int( knarg2, jplikb)
258 inarg3 = int( knarg3, jplikb)
259 inarg4 = int( knarg4, jplikb)
260 inarg5 = int( knarg5, jplikb)
261 
262 CALL fagiot_fort &
263 & (fa, ingrib, inarg1, inarg2, inarg3, inarg4, inarg5)
264 
265 
266 END SUBROUTINE fagiot_mt
267 
268 !INTF KNGRIB IN
269 !INTF KNARG1 IN
270 !INTF KNARG2 IN
271 !INTF KNARG3 IN
272 !INTF KNARG4 IN
273 !INTF KNARG5 IN
subroutine fagiot_mt(FA, KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagiot.F90:235
subroutine fagiot64(KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagiot.F90:191
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 fagiot_fort(FA, KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagiot.F90:6
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine farine_fort(FA, KOPTIO)
Definition: farine.F90:5
logical lhook
Definition: yomhook.F90:15
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine fagiot(KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagiot.F90:213
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