SURFEX v8.1
General documentation of Surfex
fainoc.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 fainoc_fort &
4 & (fa, krang )
5 USE fa_mod, ONLY : fa_com, jpniil
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Ce sous-programme permet d'INterpreter, pour un fichier ARPEGE
12 ! ouvert, les Options par defaut (-1) du Codage GRIB des champs:
13 ! FA%NBFPDG(KRANG), FA%NBFCSP(KRANG), FA%NSTROF(KRANG), FA%NPUFLA(KRANG).
14 ! Cette routine doit etre appelee par FAITOU ou FANOUV ou FAGOTE
15 ! pour ne pas laisser le defaut -1 lors du decodage ou du codage
16 ! GRIB.
17 !
18 !**
19 ! Arguments : KRANG (Entree) ==> Rang de l'unite logique;
20 !
21 !
22 !
23 !
24 TYPE(fa_com) :: FA
25 INTEGER (KIND=JPLIKB) KRANG
26 !
27 INTEGER (KIND=JPLIKB) IRANGC, ITRONC, INBITS
28 INTEGER (KIND=JPLIKB) ITYPTR, IAUXIL, IREP, INIMES
29 INTEGER (KIND=JPLIKB) INUMER
30 !
31 LOGICAL LLVERF, LLMLAM
32 !
33 CHARACTER(LEN=FA%JPLMES) CLMESS
34 CHARACTER(LEN=FA%JPLSPX) CLNSPR
35 
36 !**
37 ! 1. - INITIALISATIONS PREALABLES.
38 !-----------------------------------------------------------------------
39 !
40 REAL(KIND=JPRB) :: ZHOOK_HANDLE
41 IF (lhook) CALL dr_hook('FAINOC_MT',0,zhook_handle)
42 llverf=.false.
43 !
44 ! Verrouillage eventuel du fichier.
45 !
46 IF (fa%LFAMUL) CALL lfiver_fort &
47 & (fa%LFI, fa%FICHIER(krang)%VRFICH,'ON')
48 llverf=fa%LFAMUL
49 !
50 irangc=fa%FICHIER(krang)%NUCADR
51 llmlam=fa%CADRE(irangc)%LIMLAM
52 itronc=fa%CADRE(irangc)%MTRONC
53 ityptr=fa%CADRE(irangc)%NTYPTR
54 !
55 !**
56 ! 2. - INTERPRETATION DES OPTIONS PAR DEFAUT.
57 !-----------------------------------------------------------------------
58 !
59 ! On distingue le cas ARPEGE du cas ALADIN (LLMLAM=.T.).
60 !
61 !
62 ! Evaluation du nombre de bits par valeur point-de-grille
63 !
64 IF (fa%FICHIER(krang)%NBFPDG.LT.0) THEN
65  IF (llmlam) THEN
66  fa%FICHIER(krang)%NBFPDG=16
67  ELSE
68  fa%FICHIER(krang)%NBFPDG=16
69  ENDIF
70 ENDIF
71 !
72 ! Evaluation du nombre de bits par partie reelle/imagin. de coeff. spectral
73 !
74 IF (fa%FICHIER(krang)%NBFCSP.LT.0) THEN
75  IF (llmlam) THEN
76  fa%FICHIER(krang)%NBFCSP=18
77  ELSE
78  fa%FICHIER(krang)%NBFCSP=16
79  ENDIF
80 ENDIF
81 !
82 ! Evaluation de la sous-troncature non compactee
83 !
84 IF (fa%FICHIER(krang)%NSTROF.LT.0) THEN
85  inbits=fa%FICHIER(krang)%NBFCSP
86  IF (llmlam) THEN
87  iauxil=max( itronc, -ityptr )
88  iauxil=max( 10_jplikb , ((1+iauxil)*25)/(10*inbits), &
89 & (1+iauxil)/10 )
90  iauxil=min( iauxil, itronc-1, -ityptr-1 )
91  fa%FICHIER(krang)%NSTROF=iauxil
92  ELSE
93  iauxil=max( 10_jplikb , 480/inbits-10, (1+itronc)/10 )
94  iauxil=min( iauxil, itronc-1 )
95  fa%FICHIER(krang)%NSTROF=iauxil
96  ENDIF
97 ENDIF
98 !
99 ! Evaluation de la puissance de laplacien
100 !
101 IF (fa%FICHIER(krang)%NPUFLA.LT.0) THEN
102  IF (llmlam) THEN
103  fa%FICHIER(krang)%NPUFLA=2
104  ELSE
105  fa%FICHIER(krang)%NPUFLA=1
106  ENDIF
107 ENDIF
108 !**
109 ! 10. - PHASE TERMINALE : MESSAGERIE,
110 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
111 !-----------------------------------------------------------------------
112 !
113 !
114 ! Deverrouillage eventuel du fichier.
115 !
116 IF (llverf) CALL lfiver_fort &
117 & (fa%LFI, fa%FICHIER(krang)%VRFICH,'OFF')
118 !
119 IF (ixnvms(krang).NE.2) THEN
120  IF (lhook) CALL dr_hook('FAINOC_MT',1,zhook_handle)
121  RETURN
122 ENDIF
123 !
124 inumer=jpniil
125 inimes=ixnvms(krang)
126 irep=0
127 clnspr='FAINOC'
128 WRITE (unit=clmess,fmt='(''KRANG='',I4)') krang
129 CALL faipar_fort &
130 & (fa, inumer,inimes,irep,.false.,clmess, &
131 & clnspr,' ',.false.)
132 !
133 IF (lhook) CALL dr_hook('FAINOC_MT',1,zhook_handle)
134 
135 CONTAINS
136 
137 #include "facom2.ixnvms.h"
138 
139 END SUBROUTINE fainoc_fort
140 
141 
142 
143 ! Oct-2012 P. Marguinaud 64b LFI
144 SUBROUTINE fainoc64 &
145 & (krang)
146 USE fa_mod, ONLY : fa => fa_com_default, &
149 USE lfi_precision
150 IMPLICIT NONE
151 ! Arguments
152 INTEGER (KIND=JPLIKB) KRANG ! IN
153 
154 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
155 
156 CALL fainoc_fort &
157 & (fa, krang)
158 
159 END SUBROUTINE fainoc64
160 
161 SUBROUTINE fainoc &
162 & (krang)
163 USE fa_mod, ONLY : fa => fa_com_default, &
166 USE lfi_precision
167 IMPLICIT NONE
168 ! Arguments
169 INTEGER (KIND=JPLIKM) KRANG ! IN
170 
171 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
172 
173 CALL fainoc_mt &
174 & (fa, krang)
175 
176 END SUBROUTINE fainoc
177 
178 SUBROUTINE fainoc_mt &
179 & (fa, krang)
180 USE fa_mod, ONLY : fa_com
181 USE lfi_precision
182 IMPLICIT NONE
183 ! Arguments
184 type(fa_com) fa ! INOUT
185 INTEGER (KIND=JPLIKM) KRANG ! IN
186 ! Local integers
187 INTEGER (KIND=JPLIKB) IRANG ! IN
188 ! Convert arguments
189 
190 irang = int( krang, jplikb)
191 
192 CALL fainoc_fort &
193 & (fa, irang)
194 
195 
196 END SUBROUTINE fainoc_mt
197 
198 !INTF KRANG IN
integer, parameter jplikb
subroutine fainoc(KRANG)
Definition: fainoc.F90:163
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine fainoc64(KRANG)
Definition: fainoc.F90:146
subroutine new_fa_default()
Definition: fa_mod.F90:649
subroutine fainoc_mt(FA, KRANG)
Definition: fainoc.F90:180
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine fainoc_fort(FA, KRANG)
Definition: fainoc.F90:5
logical lhook
Definition: yomhook.F90:15
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
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31