4 & (fa, krep, krang, cdpref, knivau, cdsuff, &
5 & psec4, ldcosp, kvalco, klongd, &
6 & ldundf, pundf, ydgr1tab)
43 INTEGER (KIND=JPLIKB) KREP, KRANG, KNIVAU, KLONGD
45 INTEGER (KIND=JPLIKB) KVALCO(*)
46 REAL (KIND=JPDBLR) PSEC4(*), PUNDF, ZUNDF
48 LOGICAL LDCOSP, LDUNDF, LLUNDF
50 CHARACTER CDPREF*(*), CDSUFF*(*)
54 REAL (KIND=JPDBLR),
ALLOCATABLE :: ZSEC4(:)
55 INTEGER (KIND=JPLIKB),
ALLOCATABLE :: IVALCO(:)
56 REAL (KIND=JPDBLR) :: ZMIN, ZA
57 REAL (KIND=JPDBLR) :: ZSEC2(10+2*(fa%jpxniv+1)), ZSEC3(2), ZPULAP
59 INTEGER (KIND=JPLIKB) ISEC0(2), ISEC1(fa%jpsec1)
60 INTEGER (KIND=JPLIKB) ISEC2(fa%jpsec2), ISEC3(2)
61 INTEGER (KIND=JPLIKB) ISEC4(fa%jpsec4), ILONSEC2
62 INTEGER (KIND=JPLIKB) ILENG, IWORD, IRET, JM, IPULAP
63 INTEGER (KIND=JPLIKB) ILCHAM, JN, IDECAL, ICPACK
64 INTEGER (KIND=JPLIKB) ITRONC, ILOW, IHIGH, IDIMNC, INBITS
65 INTEGER (KIND=JPLIKB) IL, IADD, IRANGC, IILCHAM, INIMES
66 INTEGER (KIND=JPLIKB) INUMER, IDX, JLAT, JLON, IDECOPT
67 INTEGER (KIND=JPLIKB) IFAORI, IFAMOD, INBIMO
71 CHARACTER(LEN=1) CLOPER
75 CHARACTER(LEN=FA%JPXNOM) CLACTI
76 CHARACTER(LEN=FA%JPLMES) CLMESS
77 CHARACTER(LEN=FA%JPLSPX) CLNSPR
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 IF (krang.LE.0.OR.krang.GT.fa%JPNXFA)
THEN 103 icpack=fa%FICHIER(krang)%NSTROF
104 irangc=fa%FICHIER(krang)%NUCADR
105 llmlam=fa%CADRE(irangc)%LIMLAM
106 itronc=fa%CADRE(irangc)%MTRONC
110 ilonsec2=21+fa%CADRE(irangc)%NOMPAR(2)
118 ilonsec2=22+fa%CADRE(irangc)%NLATIT
122 kvalco(1)=fa%FICHIER(krang)%NFGRIB
126 ilcham=fa%CADRE(irangc)%NSFLAM
128 ilcham=(1+itronc)*(2+itronc)
131 inbits=fa%FICHIER(krang)%NBFCSP
134 ilcham=fa%CADRE(irangc)%NVAPDG
136 inbits=fa%FICHIER(krang)%NBFPDG
141 llfacde = fa%FICHIER(krang)%NCOGRIF(11) /= 0
146 ALLOCATE (zsec4(ilcham))
148 IF (ldcosp .AND. llmlam)
THEN 159 & (fa, krep, krang, psec4, ipulap )
160 zpulap=
REAL(ipulap,
jpdblr)/1000._JPDBLR
164 print *,
'FACODX: puissance de laplacien selectionee ',zpulap, &
165 &
' pour une sous-tronc de ',icpack
167 IF (krep.NE.0)
GOTO 1001
175 DO jm=1,fa%CADRE(irangc)%NOMPAR(2)
177 iadd=4* max(icpack+1-jm,1_jplikb )
179 DO idx=fa%CADRE(irangc)%NOMPAR(ilow)+iadd,fa%CADRE(irangc)%NOMPAR(ilow+1)
181 jn=(idx-fa%CADRE(irangc)%NOMPAR(ilow))/4
182 zsec4(iilcham)=psec4(idx) * &
183 & ((
REAL(jn**2+jm**2,
jpdblr))**zpulap)
188 idimnc=ilcham-iilcham
190 zmin = minval(zsec4(1:iilcham))
191 za = maxval(zsec4(1:iilcham)) - zmin
195 WRITE (unit=fa%NULOUT,fmt=*)
'FACODX: traitement du champ: ', &
196 & cdpref,knivau,cdsuff
199 IF (llfacde)
CALL facdec_fort (fa, krep, za, zmin, inbits, idecopt)
203 ELSEIF(ldcosp .AND. .NOT.llmlam)
THEN 208 zsec4(1:iilcham) = psec4(1:iilcham)
209 idimnc=(1+icpack)*(2+icpack)
218 IF (fa%CADRE(irangc)%SINLAT(1) .GE. 0)
THEN 219 IF (llmlam .AND. fa%CADRE(irangc)%SINLAT(10).LT.0)
THEN 228 WRITE (unit=fa%NULOUT,fmt=*) &
229 &
' FACODX: Grille LAT-LON pour BDAP -> ', &
230 &
' renversement des valeurs pour etre rangees NS' 232 DO jlat=1,fa%CADRE(irangc)%NLATIT
233 DO jlon=1,fa%CADRE(irangc)%NXLOPA
234 jn=jlon+fa%CADRE(irangc)%NXLOPA*(jlat-1)
235 idx=jlon+fa%CADRE(irangc)%NXLOPA*(fa%CADRE(irangc)%NLATIT-jlat)
236 zsec4(idx) = psec4(jn)
240 zsec4(1:iilcham) = psec4(1:iilcham)
243 IF (llmlam .AND. fa%CADRE(irangc)%SINLAT(2).LT.0)
THEN 245 WRITE (unit=fa%NULOUT,fmt=*) &
246 &
' FACODX: Grille LAT-LON pour BDAP -> ', &
247 &
' renversement des valeurs pour etre rangees NS' 249 DO jlat=1,fa%CADRE(irangc)%NLATIT
250 DO jlon=1,fa%CADRE(irangc)%NXLOPA
251 jn=jlon+fa%CADRE(irangc)%NXLOPA*(jlat-1)
252 idx=jlon+fa%CADRE(irangc)%NXLOPA*(fa%CADRE(irangc)%NLATIT-jlat)
253 zsec4(idx) = psec4(jn)
257 zsec4(1:iilcham) = psec4(1:iilcham)
263 zmin = minval(zsec4(1:iilcham))
264 za = maxval(zsec4(1:iilcham)) - zmin
268 WRITE (unit=fa%NULOUT,fmt=*)
'FACODX: traitement du champ: ', &
269 & cdpref,knivau,cdsuff
273 IF (abs(za) <= epsilon(za))
THEN 278 ELSEIF (zmin /= 0_jpdblr .AND. abs(zmin) < epsilon(zmin))
THEN 283 CALL facdec_fort (fa, krep, za, zmin, inbits, idecopt)
285 WRITE (unit=fa%NULOUT,fmt=*)
'FACODX: field incriminated by FACDEC was ', cdpref,knivau,cdsuff
299 & (fa, krep, krang, cdpref, knivau, cdsuff, ldcosp, &
300 & iilcham, isec1, isec2, zsec2, isec3, zsec3, isec4,&
307 IF (llfacde .AND. isec1(23) == 0)
THEN 314 IF (fa%FICHIER(krang)%NCOGRIF(1)==1) cloper=
'K' 323 IF (ydgr1tab%LMULTI)
THEN 324 zsec4 = zsec4 * ydgr1tab%FMULTI
325 zundf = zundf * ydgr1tab%FMULTI
333 llundf = any(zsec4 == zundf)
352 ileng=(kind(kvalco)/4)*(ilcham+2-idecal)
361 WRITE (unit=fa%NULOUT,fmt=*)
' FACODX: CLOPER = ',cloper
362 WRITE (unit=fa%NULOUT,fmt=*) &
363 &
' FACODX: IILCHAM, ILCHAM, IDECAL, ILENG = ', &
364 & iilcham, ilcham, idecal, ileng
365 WRITE (unit=fa%NULOUT,fmt=*)
' * ISEC1 = ',isec1
366 WRITE (unit=fa%NULOUT,fmt=*) &
367 &
' * ILONSEC2 ! ISEC2(1:ILONSEC2) = ', &
368 & ilonsec2,
' ! ', isec2(1:ilonsec2)
369 WRITE (unit=fa%NULOUT,fmt=*)
' * ZSEC2(1:2) = ',zsec2(1:2)
370 IF (isec2(12).GT.0)
WRITE (unit=fa%NULOUT,fmt=*) &
371 &
' * ISEC2(12) ! ZSEC2(11:10+ISEC2(12)) = ', &
372 & isec2(12),
' ! ', zsec2(11:10+isec2(12))
373 WRITE (unit=fa%NULOUT,fmt=*)
' * FA%JPSEC4 ! ISEC4 = ', &
374 & fa%JPSEC4,
' ! ',isec4
375 WRITE (unit=fa%NULOUT,fmt=*)
' * ZSEC4(1:20) = ', &
409 CALL fagribex(isec0,isec1,isec2,zsec2,isec3,zsec3,isec4, &
410 & zsec4,iilcham,kvalco(idecal+1),ileng,iword, &
417 ELSEIF (iret.LT.0)
THEN 419 WRITE (unit=fa%NULOUT,fmt=*)
420 WRITE (unit=fa%NULOUT,fmt=*) &
421 &
'!------------------------------------------' 422 WRITE (unit=fa%NULOUT,fmt=*) &
423 &
'! FACODX: WARNING !!! !' 424 WRITE (unit=fa%NULOUT,fmt=*) &
425 &
'!------------------------------------------' 426 WRITE (unit=fa%NULOUT,fmt=*)
' Code retour de GRIBEX = ', &
427 & iret,
' pour le champ: ',cdpref,knivau,cdsuff
428 WRITE (unit=fa%NULOUT,fmt=*)
433 iword=1+(isec0(1)-1)/
jplikb 434 klongd=idecal+iword+idimnc
436 WRITE (unit=fa%NULOUT,fmt=*) &
437 &
' FACODX: longueur du GRIB en nb octets et en mots = ', &
439 WRITE (unit=fa%NULOUT,fmt=*) &
440 &
' FACODX: longueur de l''article FA en mots = ', &
442 IF (isec4(4).EQ.64 .AND. isec4(3).EQ.128)
THEN 443 WRITE (unit=fa%NULOUT,fmt=*) &
444 &
' FACODX: complex packing with P=',isec4(17), &
445 &
' and sub trunc = ',isec4(18)
452 IF (klongd.GT.ilcham+2)
THEN 454 WRITE (unit=fa%NULOUT,fmt=*) &
455 &
' FACODX: article FA + long avec compactage', &
456 &
' que sans => on le supprime' 474 DO jm=0,fa%CADRE(irangc)%NOMPAR(2)
476 ilow=fa%CADRE(irangc)%NOMPAR(il)
479 ihigh=fa%CADRE(irangc)%NOMPAR(il+1)
481 ihigh=ilow+4*(icpack+1-jm)-1
482 IF (ihigh.LE.ilow) ihigh=ilow+3
487 zsec4(iilcham)=psec4(idx)
490 IF (iilcham.NE.idimnc)
THEN 491 WRITE (unit=fa%NULOUT,fmt=
'(A35,I10,A11,I10)') &
492 &
'FACODX: incoherence entre IILCHAM= ',iilcham, &
493 &
'et IDIMNC= ',idimnc
501 zsec4(1:2*(icpack+1))=psec4(1:2*(icpack+1))
502 iilcham=2*(icpack+1)-1
507 IF (jn.LE.icpack)
THEN 509 zsec4(iilcham) = psec4(idx)
510 zsec4(iilcham+1) = psec4(idx+1)
514 IF (iilcham+1.NE.idimnc)
THEN 515 WRITE (unit=fa%NULOUT,fmt=
'(A35,I10,A11,I10)') &
516 &
'FACODX: incoherence entre IILCHAM+1= ',iilcham+1, &
517 &
'et IDIMNC= ',idimnc
526 ALLOCATE (ivalco(idimnc))
527 ivalco(1:idimnc)=transfer(zsec4,ivalco,idimnc)
528 kvalco(idecal+iword+1:klongd)=ivalco(1:idimnc)
537 IF (
ALLOCATED(zsec4))
DEALLOCATE ( zsec4 )
552 WRITE (unit=clmess,fmt=
'(''KREP='',I5,'', KRANG='',I4, & 553 & '', CDPREF='''''',A,'''''', KNIVAU='',I6, & 554 & '', CDSUFF='''''',A,'''''', LDCOSP= '',L1, & 555 & '', KLONGD='',I6)') &
556 & krep, krang, cdpref(1:len_trim(cdpref)), knivau, &
557 & cdsuff(1:len_trim(cdsuff)), ldcosp, klongd
559 & (fa, inumer,inimes,krep,.false.,clmess, &
560 & clnspr,clacti,.false.)
562 &
' CAUTION: this field is not packed or it will occupy more space' 564 & (fa, inumer,inimes,krep,.false.,clmess, &
565 & clnspr,clacti,.false.)
572 llfata=llmoer(krep,krang)
574 IF (fa%LFAMOP.OR.llfata)
THEN 579 WRITE (unit=clmess,fmt=
'(''KREP='',I5,'', KRANG='',I4, & 580 & '', CDPREF='''''',A,'''''', KNIVAU='',I6, & 581 & '', CDSUFF='''''',A,'''''', LDCOSP= '',L1, & 582 & '', KLONGD='',I6)') &
583 & krep, krang, cdpref(1:len_trim(cdpref)), knivau, &
584 & cdsuff(1:len_trim(cdsuff)), ldcosp, klongd
586 & (fa, inumer,inimes,krep,.false.,clmess, &
587 & clnspr,clacti,.false.)
594 #include "facom2.llmoer.h" integer, parameter jplikb
subroutine facdec_fort(FA, KREP, PA, PMIN, KNBIT, KDEC)
subroutine fainig_fort(FA, KREP, KRANG, CDPREF, KNIVAU, CDSUFF, LDCOSP, KLCHAM, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4, YDGR1TAB)
integer(kind=jplikb), parameter nundef
integer, parameter jpdblr
subroutine facodx_fort(FA, KREP, KRANG, CDPREF, KNIVAU, CDSUFF, PSEC4, LDCOSP, KVALCO, KLONGD, LDUNDF, PUNDF, YDGR1TAB)
subroutine fagribex(KSEC0, KSEC1, KSEC2, PSEC2, KSEC3, PSEC3, KSEC4, PSEC4, KLENP, KGRIB, KLENG, KWORD, HOPER, KRET)
subroutine fapula_fort(FA, KREP, KRANG, PSPEC, KPULAP)
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
integer(kind=jplikb), parameter jpniil