4 & (fa, krep, krang, cdnoma, kvalco, klonga, &
5 & pchamp, ldcosp, cdpref, knivau, cdsuff, &
6 & ldundf, pundf, ydgr1tab)
46 INTEGER (KIND=JPLIKB) KREP, KRANG, KLONGA, KNIVAU
48 INTEGER (KIND=JPLIKB),
TARGET :: KVALCO(klonga)
49 REAL (KIND=JPDBLR) PCHAMP(*)
50 INTEGER (KIND=JPLIKB),
POINTER :: IVALCO (:)
52 REAL (KIND=JPDBLR) PUNDF
54 LOGICAL LDCOSP, LDUNDF, LLUNDF, LLSWAP
56 CHARACTER CDNOMA*(*), CDPREF*(*), CDSUFF*(*)
60 REAL (KIND=JPDBLR) ZSEC2(10+2*(fa%jpxniv+1)), ZSEC3(2)
61 REAL (KIND=JPDBLR),
ALLOCATABLE :: ZSEC4(:), ZCHAMP(:)
62 REAL (KIND=JPDBLR) ZUNDF
63 REAL (KIND=JPDBLR) ZPULAP
65 INTEGER (KIND=JPLIKB) ISEC0(2), ISEC1(fa%jpsec1)
66 INTEGER (KIND=JPLIKB) ISEC2(fa%jpsec2), ISEC3(2)
67 INTEGER (KIND=JPLIKB) ISEC4(fa%jpsec4)
68 INTEGER (KIND=JPLIKB) ILCHAM, ISTRIA, IDECAL
69 INTEGER (KIND=JPLIKB) IPOFIN, ILONSEC2
70 INTEGER (KIND=JPLIKB) ITRONC, IIND, ILOW, IHIGH
71 INTEGER (KIND=JPLIKB) IL, IADD, IRANGC, IILCHAM
72 INTEGER (KIND=JPLIKB) INIMES
73 INTEGER (KIND=JPLIKB) IVALC3, IVALC4, IVALC5, IWORD
74 INTEGER (KIND=JPLIKB) INUMER, ILENG, IRET, IDX
75 INTEGER (KIND=JPLIKB) JN, JM, JLAT, JLON, J
76 INTEGER (KIND=JPLIKB) IFAORI, IFAMOD
77 INTEGER (KIND=JPLIKB) INIPAR (8)
79 LOGICAL LLMLAM, LLCOSP
81 CHARACTER(LEN=1) CLOPER
82 CHARACTER(LEN=8) CLGRIB
84 CHARACTER(LEN=FA%JPLMES) CLMESS
85 CHARACTER(LEN=FA%JPLSPX) CLNSPR
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
96 IF (krang.LE.0.OR.krang.GT.fa%JPNXFA)
THEN 101 inumer=fa%FICHIER(krang)%NULOGI
109 IF (kvalco(1).NE.3.OR. &
110 & kvalco(2).LT.0.OR.kvalco(2).GT.1.OR. &
111 & (kvalco(2).EQ.1.AND.kvalco(4).LT.0))
THEN 115 llcosp=kvalco(2).EQ.1
118 IF ((llcosp.AND..NOT.ldcosp).OR.(.NOT.llcosp.AND.ldcosp))
THEN 123 irangc=fa%FICHIER(krang)%NUCADR
124 llmlam=fa%CADRE(irangc)%LIMLAM
125 itronc=fa%CADRE(irangc)%MTRONC
129 ilcham=fa%CADRE(irangc)%NSFLAM
132 ilcham=(1+itronc)*(2+itronc)
136 ilcham=fa%CADRE(irangc)%NVAPDG
140 ilonsec2=22+fa%CADRE(irangc)%NLATIT
144 ALLOCATE (zchamp(ilcham), zsec4(ilcham))
166 IF (ldcosp.AND.llmlam)
THEN 167 istria=4*(1+fa%CADRE(irangc)%NOZPAR(1)+fa%CADRE(irangc)%NOZPAR(2)+ &
168 & ivalc4*(ivalc4-1)/2)
169 iilcham=ilcham-istria
177 clgrib=transfer(kvalco(idecal+1), clgrib)
178 llswap = (clgrib(1:4) /=
'GRIB') .AND. (clgrib(5:8) ==
'BIRG')
180 ALLOCATE (ivalco(klonga))
181 CALL jswap (ivalco(idecal+1), kvalco(idecal+1), 8_jplikm, int(klonga-idecal,
jplikm))
187 ileng=2*(klonga-idecal)
194 CALL fagribex(isec0,isec1,isec2,zsec2,isec3,zsec3,isec4, &
195 & pchamp,iilcham,ivalco(idecal+1:klonga),ileng,iword, &
204 WRITE (unit=fa%NULOUT,fmt=*) &
205 &
' FADECX: KLONGA, IDECAL, ILENG, IILCHAM = ', &
206 & klonga, idecal, ileng, iilcham
207 WRITE (unit=fa%NULOUT,fmt=*)
' * ISEC0 = ',isec0
208 WRITE (unit=fa%NULOUT,fmt=*)
' * ISEC1 = ',isec1
209 WRITE (unit=fa%NULOUT,fmt=*) &
210 &
' * ILONSEC2 ! ISEC2(1:ILONSEC2) = ', &
211 & ilonsec2,
' ! ', isec2(1:ilonsec2)
212 WRITE (unit=fa%NULOUT,fmt=*)
' * ZSEC2(1:2) = ',zsec2(1:2)
213 IF (isec2(12).GT.0)
WRITE (unit=fa%NULOUT,fmt=*) &
214 &
' * ISEC2(12) ! ZSEC2(11:10+ISEC2(12)) = ', &
215 & isec2(12),
' ! ', zsec2(11:10+isec2(12))
216 WRITE (unit=fa%NULOUT,fmt=*)
' * FA%JPSEC4 ! ISEC4 = ', &
217 & fa%JPSEC4,
' ! ',isec4
233 WRITE (unit=fa%NULOUT,fmt=*)
' FADECX: IRET, KREP = ',iret, krep
235 ELSEIF (iret.LT.0 .AND. ((iret /= -4) .OR. .NOT. ldundf))
THEN 237 WRITE (unit=fa%NULOUT,fmt=*)
238 WRITE (unit=fa%NULOUT,fmt=*) &
239 &
'!------------------------------------------' 240 WRITE (unit=fa%NULOUT,fmt=*) &
241 &
'! FADECX: WARNING !!! !' 242 WRITE (unit=fa%NULOUT,fmt=*) &
243 &
'!------------------------------------------' 244 WRITE (unit=fa%NULOUT,fmt=*)
' Code retour de GRIBEX = ', &
245 & iret,
' pour le champ: ',cdnoma
246 WRITE (unit=fa%NULOUT,fmt=*)
248 IF (isec4(1).LT.iilcham)
THEN 251 WRITE (unit=fa%NULOUT,fmt=*) &
252 &
'FADECX: ERREUR !!! Nbre de valeurs decodees = ', &
253 & isec4(1),
' et nbre de valeurs attendues = ',iilcham
256 ELSEIF (isec4(1).GT.iilcham)
THEN 259 WRITE (unit=fa%NULOUT,fmt=*) &
260 &
'FADECX: ERREUR !!! Nbre de valeurs decodees = ', &
261 & isec4(1),
' et nbre de valeurs attendues = ',iilcham
263 IF (llmoer(krep,krang))
GOTO 1001
266 IF (ivalc3.NE.isec4(2).AND.fa%LFAMOP)
THEN 267 WRITE (unit=fa%NULOUT,fmt=*) &
268 &
' FADECX: WARNING, le nb de bits de codage qui avait', &
269 &
' ete demande ( ',ivalc3,
' ) est different de celui qui a', &
270 &
' ete finalement retenu ( ',isec4(2),
' ) par GRIBEX.' 271 WRITE (unit=fa%NULOUT,fmt=*) &
272 &
' => Gain de place sans perte de precision' 277 IF (ldcosp.AND..NOT.llmlam.AND.(isec4(18).NE.ivalc4 &
278 & .OR.isec4(17).NE.ivalc5))
THEN 280 WRITE (unit=fa%NULOUT,fmt=*) &
281 &
'Ss-tronc non compactee dans GRIB = ',isec4(18), &
282 &
' et on attend: ',ivalc4
283 WRITE (unit=fa%NULOUT,fmt=*) &
284 &
'Puissance de laplacien dans GRIB = ',isec4(17), &
285 &
' et on attend: ',ivalc5
294 iword=1+(isec0(1)-1)/
jplikb 296 WRITE (unit=fa%NULOUT,fmt=*)
' FADECX: IWORD = ',iword
303 ipofin=ipofin+(1+ivalc4)*(2+ivalc4)
307 IF (klonga.LT.ipofin)
THEN 310 ELSEIF (klonga.GT.ipofin)
THEN 312 IF (llmoer(krep,krang))
GOTO 1001
318 IF (ldcosp.AND.llmlam)
THEN 322 zsec4(1:iilcham) = pchamp(1:iilcham)
324 zpulap=
REAL(IVALC5,JPDBLR) * (-0.001_jpdblr)
326 DO jm=1,fa%CADRE(irangc)%NOMPAR(2)
328 iadd=4*max(ivalc4+1-jm,1_jplikb )
330 DO idx=fa%CADRE(irangc)%NOMPAR(ilow)+iadd,fa%CADRE(irangc)%NOMPAR(ilow+1)
332 jn=(idx-fa%CADRE(irangc)%NOMPAR(ilow))/4
333 zchamp(idx)=zsec4(iind) * &
334 & ((
REAL(jn**2+jm**2,
jpdblr))**zpulap)
339 pchamp(1:ilcham) = zchamp(1:ilcham)
349 DO jm=0,fa%CADRE(irangc)%NOMPAR(2)
351 ilow=fa%CADRE(irangc)%NOMPAR(il)
354 ihigh=fa%CADRE(irangc)%NOMPAR(il+1)
356 ihigh=ilow+4*(ivalc4+1-jm)-1
357 IF (ihigh.LE.ilow) ihigh=ilow+3
362 pchamp(idx)=transfer(kvalco(idecal+iword+iind), pchamp(idx))
369 pchamp(1:2*(ivalc4+1))= &
370 & transfer(kvalco(idecal+iword+1:idecal+iword+2*(ivalc4+1)), pchamp(1:2*(ivalc4+1)))
376 IF (jn.LE.ivalc4)
THEN 378 pchamp(idx) = transfer(kvalco(idecal+iword+iind), pchamp(idx))
379 pchamp(idx+1) = transfer(kvalco(idecal+iword+iind+1), pchamp(idx+1))
393 IF ((isec2(1)==0.OR.isec2(1)==10.OR.isec2(1)==20.OR. &
394 & isec2(1)==30) .AND. .NOT.ldcosp)
THEN 396 WRITE (unit=fa%NULOUT,fmt=*) &
397 &
' FADECX: Grille LAT-LON issue BDAP -> ', &
398 &
' renversement des valeurs pour etre rangees SN' 400 DO jlat=1,fa%CADRE(irangc)%NLATIT
401 DO jlon=1,fa%CADRE(irangc)%NXLOPA
402 jn=jlon+fa%CADRE(irangc)%NXLOPA*(jlat-1)
403 idx=jlon+fa%CADRE(irangc)%NXLOPA*(fa%CADRE(irangc)%NLATIT-jlat)
404 zchamp(idx) = pchamp(jn)
407 pchamp(1:ilcham) = zchamp(1:ilcham)
417 & (fa, krep, inumer, cdpref, knivau, cdsuff, inipar, &
422 llundf = isec1(5) == 192
431 IF (ylgr1tab%LMULTI)
THEN 432 pchamp(1:ilcham) = pchamp(1:ilcham) / ylgr1tab%FMULTI
433 zundf = zundf / ylgr1tab%FMULTI
435 IF (ldundf .AND. llundf)
THEN 437 IF (pchamp(j) == zundf)
THEN 452 llfata=llmoer(krep,krang)
454 IF (fa%LFAMOP.OR.llfata)
THEN 458 WRITE (unit=clmess,fmt=
'(''KREP='',I5,'', KRANG='',I4, & 459 & '', CDNOMA='''''',A,'''''', KLONGA= '',I8, & 460 & '', LDCOSP='',L1)') &
461 & krep, krang, cdnoma, klonga, ldcosp
463 & (fa, inumer,inimes,krep,.false.,clmess, &
464 & clnspr,cdnoma,.false.)
471 #include "facom2.llmoer.h" integer, parameter jplikb
subroutine fadecx_fort(FA, KREP, KRANG, CDNOMA, KVALCO, KLONGA, PCHAMP, LDCOSP, CDPREF, KNIVAU, CDSUFF, LDUNDF, PUNDF, YDGR1TAB)
integer, parameter jpdblr
subroutine fagribex(KSEC0, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4, PSEC4, KLENP, KGRIB, KLENG, KWORD, HOPER, KRET)
integer, parameter jplikm
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
subroutine faipag_fort(FA, KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, KNIPAR, YDGR1TAB)
integer(kind=jplikb), parameter jpniil