SURFEX v8.1
General documentation of Surfex
facgra.F90
Go to the documentation of this file.
1 SUBROUTINE facgra_fort &
2 & (fa, krep, krang, cdpref, knivau, cdsuff, &
3 & pchamp, ldcosp, kvalco, klongd, &
4 & ldundf, pundf)
5 USE fa_mod, ONLY : fa_com, jpniil, facadr, fafich, &
8  & nundef
9 USE parkind1, ONLY : jprb
10 USE yomhook , ONLY : lhook, dr_hook
11 USE lfi_precision
13 USE grib_api
14 IMPLICIT NONE
15 !****
16 ! Sous-programme INTERNE du logiciel de Fichiers ARPEGE:
17 ! PREPARATION (codage GRIB_API) d'un CHAMP HORIZONTAL
18 ! destine a etre ecrit sur un fichier ARPEGE/ALADIN.
19 !**
20 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
21 ! KRANG (Entree) ==> Rang de l'unite logique;
22 ! CDPREF (Entree) ==> Prefixe eventuel du nom d'article;
23 ! KNIVAU (Entree) ==> Niveau vertical eventuel;
24 ! CDSUFF (Entree) ==> Suffixe eventuel du nom d'article;
25 ! ( Tableau ) PCHAMP (Entree) ==> Valeurs REELLES du champ a ecrire;
26 ! LDCOSP (Entree) ==> Vrai si le champ est represente
27 ! par des coefficients spectraux;
28 ! ( Tableau ) KVALCO (Sortie) ==> Donnees destinees a l'ecriture;
29 ! KLONGD (Entree/Sortie)
30 ! ==> Nombre de mots a ecrire;
31 !*
32 !
33 TYPE(fa_com) :: FA
34 INTEGER (KIND=JPLIKB) KREP, KRANG, KNIVAU, KLONGD, ILONGD
35 !
36 INTEGER (KIND=JPLIKB) KVALCO(*)
37 REAL (KIND=JPDBLR), TARGET :: PCHAMP(*)
38 REAL (KIND=JPDBLR) PUNDF, ZUNDF
39 !
40 LOGICAL LDCOSP, LDUNDF, LLFATA
41 !
42 CHARACTER CDPREF*(*), CDSUFF*(*)
43 !
44 CHARACTER(LEN=FA%JPXNOM) CLACTI
45 CHARACTER(LEN=FA%JPLSPX) CLNSPR
46 CHARACTER(LEN=FA%JPLMES) CLMESS
47 INTEGER (KIND=JPLIKB) :: INIMES, INUMER
48 CHARACTER, ALLOCATABLE :: CLGRIB (:)
49 INTEGER (KIND=JPKSIZE_T) :: ILGRIB
50 INTEGER (KIND=JPLIKM) :: IRET, IGRIBH
51 INTEGER (KIND=JPLIKB) :: INGRIB, INBITS
52 
53 !
54 REAL (KIND=JPRB) :: ZHOOK_HANDLE
55 
56 IF (lhook) CALL dr_hook('FACGRA_MT',0,zhook_handle)
57 
58 krep = 0
59 
60 CALL facgrm_fort (fa, krep, krang, cdpref, knivau, cdsuff, pchamp, &
61  & ldcosp, igribh, ldundf, pundf, 1_jplikb)
62 
63 IF (krep /= 0) GOTO 1001
64 
65 CALL igrib_get_value (igribh, 'INGRIB', ingrib)
66 CALL igrib_get_value (igribh, 'INBITS', inbits)
67 
68 CALL igrib_get_message_size (igribh, ilgrib)
69 
70 ALLOCATE (clgrib(ilgrib))
71 CALL grib_copy_message (igribh, clgrib, status=iret)
72 
73 IF (iret == grib_success) THEN
74  ilongd = 3+(ilgrib+jplikb-1)/jplikb
75  kvalco(1) = ingrib
76  IF (ldcosp) THEN
77  kvalco(2) = 1
78  ELSE
79  kvalco(2) = 0
80  ENDIF
81  kvalco(3) = inbits
82  IF ((klongd < ilongd) .AND. (klongd > 0)) THEN
83  krep=-130
84  GOTO 1001
85  ELSE
86  klongd = ilongd
87  ENDIF
88  kvalco(4:ilongd) = transfer(clgrib, kvalco(4:ilongd))
89 ELSE
90  krep = iret-1000
91  RETURN
92 ENDIF
93 
94 DEALLOCATE (clgrib)
95 
96 CALL igrib_release (igribh)
97 
98 1001 CONTINUE
99 !
100 llfata=llmoer(krep,krang)
101 !
102 IF (fa%LFAMOP.OR.llfata) THEN
103  inimes=2
104  clnspr='FACGRA'
105  inumer=jpniil
106 !
107  WRITE (unit=clmess,fmt='(''KREP='',I5,'', KRANG='',I4, &
108 & '', CDPREF='''''',A,'''''', KNIVAU='',I6, &
109 & '', CDSUFF='''''',A,'''''', LDCOSP= '',L1, &
110 & '', KLONGD='',I10,'' < '',I10)') &
111 & krep, krang, cdpref(1:len_trim(cdpref)), knivau, &
112 & cdsuff(1:len_trim(cdsuff)), ldcosp, klongd, ilongd
113 
114  CALL faipar_fort &
115 & (fa, inumer,inimes,krep,.false.,clmess, &
116 & clnspr,clacti,.false.)
117 ENDIF
118 
119 IF (lhook) CALL dr_hook('FACGRA_MT',1,zhook_handle)
120 !
121 CONTAINS
122 
123 #include "facom2.llmoer.h"
124 
125 END SUBROUTINE
126 
integer, parameter jplikb
integer, save ngrib2_glo_sh
Definition: fa_mod.F90:466
subroutine facgrm_fort(FA, KREP, KRANG, CDPREF, KNIVAU, CDSUFF, PCHAMP, LDCOSP, KGRIBH, LDUNDF, PUNDF, KLOCSN)
Definition: facgrm.F90:5
integer, save ngrib2_lam_bf
Definition: fa_mod.F90:469
integer, save ngrib1_latlon
Definition: fa_mod.F90:470
integer(kind=jplikb), parameter nundef
Definition: fa_mod.F90:36
integer, save ngrib2_lam_gp
Definition: fa_mod.F90:468
Definition: fa_mod.F90:1
integer, parameter jprb
Definition: parkind1.F90:32
subroutine, public igrib_release(KHANDLE)
subroutine, public igrib_get_message_size(KHANDLE, KBYTES)
integer, save ngrib2_glo_gp
Definition: fa_mod.F90:467
logical lhook
Definition: yomhook.F90:15
integer, save ngrib2_latlon
Definition: fa_mod.F90:471
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
subroutine facgra_fort(FA, KREP, KRANG, CDPREF, KNIVAU, CDSUFF, PCHAMP, LDCOSP, KVALCO, KLONGD, LDUNDF, PUNDF)
Definition: facgra.F90:5