SURFEX v8.1
General documentation of Surfex
faquin.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 faquin_fort &
4 & (fa, krep, knumer, cdpref, knivau, cdsuff, &
5 & cdnoma, klnoma)
6 USE fa_mod, ONLY : fa_com
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-programme de decomposition du nom d'un article associe a un
13 ! champ.
14 !**
15 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
16 ! KNUMER (Entree) ==> Numero de l'unite logique;
17 ! CDPREF (Sortie) ==> Prefixe eventuel du nom d'article;
18 ! KNIVAU (Sortie) ==> Niveau vertical eventuel;
19 ! CDSUFF (Sortie) ==> Suffixe eventuel du nom d'article;
20 ! CDNOMA (Entree) ==> Nom de l'article LFI
21 ! KLNOMA (Entree) ==> Longueur du nom de l'article LFI
22 !
23 ! P MARGUINAUD 18/03/2013 CREATION
24 !
25 !
26 TYPE(fa_com) :: FA
27 INTEGER (KIND=JPLIKB) KREP, KNUMER, KNIVAU, KLNOMA
28 !
29 INTEGER (KIND=JPLIKB) IREP, ILPRFU, ILSUFU, IRANG, INIMES, INIVAU
30 INTEGER (KIND=JPLIKB) IB1PAR (fa%jplb1p), ILNOMA
31 !
32 LOGICAL LLVERF, LLRLFI
33 !
34 CHARACTER CDPREF*(*), CDSUFF*(*), CDNOMA*(*)
35 !
36 CHARACTER(LEN=FA%JPLMES) CLMESS
37 CHARACTER(LEN=FA%JPLSPX) CLNSPR
38 CHARACTER(LEN=FA%JPXNOM) CLNOMA
39 LOGICAL LLFATA
40 
41 !**
42 ! 1. - CONTROLES ET INITIALISATIONS.
43 !-----------------------------------------------------------------------
44 !
45 REAL(KIND=JPRB) :: ZHOOK_HANDLE
46 IF (lhook) CALL dr_hook('FAQUIN_MT',0,zhook_handle)
47 
48 irep=0
49 
50 llverf=.false.
51 llrlfi=.false.
52 ilprfu=int(len(cdpref), jplikb)
53 ilsufu=int(len(cdsuff), jplikb)
54 
55 CALL fanumu_fort (fa, knumer,irang)
56 !
57 IF (irang.EQ.0) THEN
58  irep=-51
59  GOTO 1001
60 ENDIF
61 !
62 ! Verrouillage eventuel du fichier.
63 !
64 IF (fa%LFAMUL) CALL lfiver_fort (fa%LFI, fa%FICHIER(irang)%VRFICH,'ON')
65 llverf=fa%LFAMUL
66 !
67 IF (fa%FICHIER(irang)%LCREAF) THEN
68  irep=-85
69  GOTO 1001
70 ENDIF
71 
72 cdpref = ''
73 cdsuff = ''
74 knivau = 0
75 
76 IF (cdnoma(1:8) == 'SPECSURF') THEN
77  cdpref = cdnoma(1:8)
78  cdsuff = cdnoma(9:klnoma)
79 ELSEIF (cdnoma(1:4) == 'PROF') THEN
80  cdpref = cdnoma(1:4)
81  cdsuff = cdnoma(5:klnoma)
82 ELSEIF (cdnoma(1:4) == 'SURF') THEN
83  cdpref = cdnoma(1:4)
84  cdsuff = cdnoma(5:klnoma)
85 ELSEIF (cdnoma(1:4) == 'SOMM') THEN
86  cdpref = cdnoma(1:4)
87  cdsuff = cdnoma(5:klnoma)
88 ELSEIF (cdnoma(1:4) == 'ICAO') THEN
89  cdpref = cdnoma(1:4)
90  cdsuff = cdnoma(5:klnoma)
91 ELSEIF (cdnoma(1:4) == 'SFX.') THEN
92  cdpref = cdnoma(1:4)
93  cdsuff = cdnoma(5:klnoma)
94 ELSEIF (cdnoma(1:3) == 'CLS') THEN
95  cdpref = cdnoma(1:3)
96  cdsuff = cdnoma(4:klnoma)
97 ELSEIF (cdnoma(1:3) == 'MSL') THEN
98  cdpref = cdnoma(1:3)
99  cdsuff = cdnoma(4:klnoma)
100 ELSEIF (cdnoma(1:3) == 'CLP') THEN
101  cdpref = cdnoma(1:3)
102  cdsuff = cdnoma(4:klnoma)
103 ELSEIF (cdnoma(1:3) == 'JET') THEN
104  cdpref = cdnoma(1:3)
105  cdsuff = cdnoma(4:klnoma)
106 ELSEIF (cdnoma(1:3) == 'INT') THEN
107  cdpref = cdnoma(1:3)
108  cdsuff = cdnoma(4:klnoma)
109 ELSEIF (cdnoma(1:2) == 'KT' .AND. lnum(cdnoma(3:klnoma), inivau, '(I3.3)')) THEN
110  cdpref = cdnoma(1:2)
111  cdsuff = cdnoma(6:klnoma)
112  knivau = inivau
113 ELSEIF (cdnoma(1:2) == 'KB' .AND. lnum(cdnoma(3:klnoma), inivau, '(I3.3)')) THEN
114  cdpref = cdnoma(1:2)
115  cdsuff = cdnoma(6:klnoma)
116  knivau = inivau
117 ELSEIF (cdnoma(1:1) == 'P' .AND. lnum(cdnoma(2:klnoma), inivau, '(I5.5)')) THEN
118  cdpref = cdnoma(1:1)
119  cdsuff = cdnoma(7:klnoma)
120  knivau = inivau
121  IF (knivau == 0) knivau = 100000
122 ELSEIF (cdnoma(1:1) == 'H' .AND. lnum(cdnoma(2:klnoma), inivau, '(I5.5)')) THEN
123  cdpref = cdnoma(1:1)
124  cdsuff = cdnoma(7:klnoma)
125  knivau = inivau
126 ELSEIF (cdnoma(1:1) == 'V' .AND. lnum(cdnoma(2:klnoma), inivau, '(I3.3)')) THEN
127  cdpref = cdnoma(1:1)
128  cdsuff = cdnoma(5:klnoma)
129  knivau = inivau
130 ELSEIF (cdnoma(1:1) == 'T' .AND. lnum(cdnoma(2:klnoma), inivau, '(I3.3)')) THEN
131  cdpref = cdnoma(1:1)
132  cdsuff = cdnoma(5:klnoma)
133  knivau = inivau
134 ELSEIF (cdnoma(1:1) == 'S' .AND. lnum(cdnoma(2:klnoma), inivau, '(I3.3)')) THEN
135  cdpref = cdnoma(1:1)
136  cdsuff = cdnoma(5:klnoma)
137  knivau = inivau
138 ELSEIF (cdnoma(1:1) == 'X' .AND. lnum(cdnoma(2:klnoma), inivau, '(I3.3)')) THEN
139  cdpref = cdnoma(1:1)
140  cdsuff = cdnoma(5:klnoma)
141  knivau = inivau
142 ELSE
143  cdpref = cdnoma(1:4)
144  cdsuff = cdnoma(5:)
145 ENDIF
146 
147 ilnoma=fa%JPXNOM
148 CALL fanfan_fort &
149 & (fa, irep, knumer, cdpref, knivau, cdsuff, &
150 & clnoma, ilnoma)
151 
152 IF (irep.NE.0) GOTO 1001
153 
154 IF (clnoma(1:ilnoma) /= cdnoma(1:klnoma)) THEN
155  irep=-65
156 ENDIF
157 
158 1001 CONTINUE
159 krep=irep
160 llfata=llmoer(irep,irang)
161 !
162 ! Deverrouillage eventuel du fichier.
163 !
164 IF (llverf) CALL lfiver_fort (fa%LFI, fa%FICHIER(irang)%VRFICH,'OFF')
165 
166 IF (llfata) THEN
167  inimes=2
168 ELSE
169  inimes=ixnvms(irang)
170 ENDIF
171 !
172 IF (.NOT.llfata.AND.inimes.NE.2) THEN
173  IF (lhook) CALL dr_hook('FAQUIN_MT',1,zhook_handle)
174  RETURN
175 ENDIF
176 !
177 clnspr='FAQUIN'
178 !
179 WRITE (unit=clmess,fmt='(''KREP='',I5,'', KNUMER='',I3, &
180 & '', CDPREF='''''',A,'''''', KNIVAU='',I6, &
181 & '', CDSUFF='''''',A,'''')') &
182 & krep,knumer,cdpref(1:ilprfu),knivau,cdsuff(1:ilsufu)
183 CALL faipar_fort &
184 & (fa, knumer,inimes,irep,llfata,clmess, &
185 & clnspr, cdnoma(1:klnoma),llrlfi)
186 !
187 IF (lhook) CALL dr_hook('FAQUIN_MT',1,zhook_handle)
188 
189 CONTAINS
190 
191 #include "facom2.llmoer.h"
192 #include "facom2.ixnvms.h"
193 
194 LOGICAL FUNCTION lnum (CDST, KNUM, CDFMT)
196 CHARACTER (LEN=*) :: CDST, CDFMT
197 INTEGER (KIND=JPLIKB) :: KNUM
198 INTEGER :: IREP
199 
200 irep = 0
201 READ (unit=cdst, fmt=cdfmt, iostat=irep) knum
202 
203 IF (irep == 0) THEN
204  lnum = .true.
205 ELSE
206  lnum = .false.
207  knum = 0
208 ENDIF
209 
210 END FUNCTION lnum
211 
212 END SUBROUTINE faquin_fort
213 
214 
215 
216 ! Oct-2012 P. Marguinaud 64b LFI
217 SUBROUTINE faquin64 &
218 & (krep, knumer, cdpref, knivau, cdsuff, cdnoma, &
219 & klnoma)
220 USE fa_mod, ONLY : fa => fa_com_default, &
223 USE lfi_precision
224 IMPLICIT NONE
225 ! Arguments
226 INTEGER (KIND=JPLIKB) KREP ! OUT
227 INTEGER (KIND=JPLIKB) KNUMER ! IN
228 CHARACTER (LEN=*) CDPREF ! OUT
229 INTEGER (KIND=JPLIKB) KNIVAU ! OUT
230 CHARACTER (LEN=*) CDSUFF ! OUT
231 CHARACTER (LEN=*) CDNOMA ! IN
232 INTEGER (KIND=JPLIKB) KLNOMA ! IN
233 
234 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
235 
236 CALL faquin_fort &
237 & (fa, krep, knumer, cdpref, knivau, cdsuff, cdnoma, &
238 & klnoma)
239 
240 END SUBROUTINE faquin64
241 
242 SUBROUTINE faquin &
243 & (krep, knumer, cdpref, knivau, cdsuff, cdnoma, &
244 & klnoma)
245 USE fa_mod, ONLY : fa => fa_com_default, &
248 USE lfi_precision
249 IMPLICIT NONE
250 ! Arguments
251 INTEGER (KIND=JPLIKM) KREP ! OUT
252 INTEGER (KIND=JPLIKM) KNUMER ! IN
253 CHARACTER (LEN=*) CDPREF ! OUT
254 INTEGER (KIND=JPLIKM) KNIVAU ! OUT
255 CHARACTER (LEN=*) CDSUFF ! OUT
256 CHARACTER (LEN=*) CDNOMA ! IN
257 INTEGER (KIND=JPLIKM) KLNOMA ! IN
258 
259 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
260 
261 CALL faquin_mt &
262 & (fa, krep, knumer, cdpref, knivau, cdsuff, cdnoma, &
263 & klnoma)
264 
265 END SUBROUTINE faquin
266 
267 SUBROUTINE faquin_mt &
268 & (fa, krep, knumer, cdpref, knivau, cdsuff, cdnoma, &
269 & klnoma)
270 USE fa_mod, ONLY : fa_com
271 USE lfi_precision
272 IMPLICIT NONE
273 ! Arguments
274 type(fa_com) fa ! INOUT
275 INTEGER (KIND=JPLIKM) KREP ! OUT
276 INTEGER (KIND=JPLIKM) KNUMER ! IN
277 CHARACTER (LEN=*) CDPREF ! OUT
278 INTEGER (KIND=JPLIKM) KNIVAU ! OUT
279 CHARACTER (LEN=*) CDSUFF ! OUT
280 CHARACTER (LEN=*) CDNOMA ! IN
281 INTEGER (KIND=JPLIKM) KLNOMA ! IN
282 ! Local integers
283 INTEGER (KIND=JPLIKB) IREP ! OUT
284 INTEGER (KIND=JPLIKB) INUMER ! IN
285 INTEGER (KIND=JPLIKB) INIVAU ! OUT
286 INTEGER (KIND=JPLIKB) ILNOMA ! IN
287 ! Convert arguments
288 
289 inumer = int( knumer, jplikb)
290 ilnoma = int( klnoma, jplikm)
291 
292 CALL faquin_fort &
293 & (fa, irep, inumer, cdpref, inivau, cdsuff, cdnoma, &
294 & ilnoma)
295 
296 krep = int( irep, jplikm)
297 knivau = int( inivau, jplikb)
298 
299 END SUBROUTINE faquin_mt
300 
301 !INTF KREP OUT
302 !INTF KNUMER IN
303 !INTF CDPREF OUT
304 !INTF KNIVAU OUT
305 !INTF CDSUFF OUT
306 !INTF CDNOMA IN
307 !INTF KLNOMA IN
308 
integer, parameter jplikb
subroutine faquin64(KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, CDNOMA, KLNOMA)
Definition: faquin.F90:220
subroutine fanfan_fort(FA, KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, CDNOMA, KLNOMA)
Definition: fanfan.F90:6
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine faquin(KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, CDNOMA, KLNOMA)
Definition: faquin.F90:245
subroutine new_fa_default()
Definition: fa_mod.F90:649
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine faquin_fort(FA, KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, CDNOMA, KLNOMA)
Definition: faquin.F90:6
logical lhook
Definition: yomhook.F90:15
integer, parameter jplikm
subroutine faquin_mt(FA, KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, CDNOMA, KLNOMA)
Definition: faquin.F90:270
logical function lnum(CDST, KNUM, CDFMT)
Definition: faquin.F90:195
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
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5