SURFEX v8.1
General documentation of Surfex
fadup_mod.F90
Go to the documentation of this file.
1 MODULE fadup_mod
2 
3 !**** *FADUP_MOD* - Duplicate FA library
4 
5 ! Author.
6 ! -------
7 ! Philippe Marguinaud *METEO FRANCE*
8 ! Original : 11-09-2012
9 
10 
11 USE fa_mod, ONLY : fa_com, new_fa
12 USE yomhook, ONLY : lhook, dr_hook
13 USE parkind1, ONLY : jprb, jpim
14 
15 IMPLICIT NONE
16 
18 
19 ! librarie FA
20  INTEGER (KIND=JPIM) :: ipxtro
21  INTEGER (KIND=JPIM) :: ipxlat
22  INTEGER (KIND=JPIM) :: ipxniv
23  INTEGER (KIND=JPIM) :: ipnxfa
24  INTEGER (KIND=JPIM) :: ipnxca
25 
26  INTEGER (KIND=JPIM) :: ingrib
27  INTEGER (KIND=JPIM) :: inbpdg
28  INTEGER (KIND=JPIM) :: inbcsp
29  INTEGER (KIND=JPIM) :: istron
30  INTEGER (KIND=JPIM) :: ipuila
31  INTEGER (KIND=JPIM) :: idmopl
32 
33 ! fichier
34  LOGICAL :: lnomm
35  LOGICAL :: louvr
36  CHARACTER*256 :: cnomf
37  CHARACTER*32 :: csttu
38  LOGICAL :: lerfa
39  LOGICAL :: limst
40  INTEGER (KIND=JPIM) :: inimes
41  CHARACTER*32 :: cnomc
42  INTEGER (KIND=JPIM) :: ifact
43 
44 ! cadre
45  INTEGER (KIND=JPIM) :: ityptr
46  INTEGER (KIND=JPIM) :: itronc
47  INTEGER (KIND=JPIM) :: inlati
48  INTEGER (KIND=JPIM) :: inxlon
49  INTEGER (KIND=JPIM) :: iniver
50 
51  INTEGER (KIND=JPIM), POINTER :: inlopa (:) => null ()
52  INTEGER (KIND=JPIM), POINTER :: inozpa (:) => null ()
53 
54  REAL (KIND=JPRB) :: zslapo
55  REAL (KIND=JPRB) :: zclopo
56  REAL (KIND=JPRB) :: zslopo
57  REAL (KIND=JPRB) :: zcodil
58  REAL (KIND=JPRB) :: zrefer
59 
60  REAL (KIND=JPRB), POINTER :: zsinla (:) => null ()
61  REAL (KIND=JPRB), POINTER :: zahybr (:) => null ()
62  REAL (KIND=JPRB), POINTER :: zbhybr (:) => null ()
63 
64  REAL (KIND=JPRB), POINTER :: xlap1d (:,:) => null ()
65  REAL (KIND=JPRB), POINTER :: xlap1da (:,:) => null ()
66  REAL (KIND=JPRB), POINTER :: xlap2d (:,:,:) => null ()
67  REAL (KIND=JPRB), POINTER :: xlap2da (:,:,:) => null ()
68 
69  LOGICAL :: lgard
70 
71 ! date
72  INTEGER (KIND=JPIM), POINTER :: idatef (:) => null ()
73 
74 !
75  INTEGER (KIND=JPIM) :: iulout_fa, iulout_lfi
76 
77  INTEGER (KIND=JPIM) :: iextern = 0_jpim
78  CHARACTER (LEN=64) :: cmodel = ''
79  INTEGER (KIND=JPIM) :: nidcen = 0_jpim
80 
81 END TYPE fadup_params
82 
83 PRIVATE :: fadup1, fadup2
84 
85 CONTAINS
86 
87 SUBROUTINE fadup1 (YDFA, YDDFP, KUNIT, KERR)
88 
89 ! Record necessary FA parameters
90 
91 TYPE(fa_com) :: YDFA
92 TYPE(fadup_params) :: YDDFP
93 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
94 INTEGER (KIND=JPIM), INTENT (OUT) :: KERR
95 
96 INTEGER (KIND=JPIM) :: IVAL
97 
98 CHARACTER (LEN=64) :: CLMODEL
99 
100 REAL (KIND=JPRB) :: ZHOOK_HANDLE
101 
102 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUP1',0,zhook_handle)
103 
104 yddfp%IPXTRO = int(ydfa%JPXTRO)
105 yddfp%IPXLAT = int(ydfa%JPXLAT)
106 yddfp%IPXNIV = int(ydfa%JPXNIV)
107 yddfp%IPNXFA = int(ydfa%JPNXFA)
108 yddfp%IPNXCA = int(ydfa%JPNXCA)
109 
110 CALL favori_mt (ydfa, &
111 & yddfp%INGRIB, yddfp%INBPDG, yddfp%INBCSP, &
112 & yddfp%ISTRON, yddfp%IPUILA, yddfp%IDMOPL)
113 
114 CALL faiopt_mt (ydfa, kerr, kunit, yddfp%LNOMM, yddfp%CNOMF, &
115 & yddfp%CSTTU, yddfp%LERFA, yddfp%LIMST, yddfp%INIMES, &
116 & yddfp%CNOMC)
117 
118 CALL lfiofm_mt (ydfa%LFI, kerr, kunit, yddfp%IFACT, yddfp%LOUVR)
119 
120 ALLOCATE (yddfp%INLOPA (ydfa%JPXPAH), yddfp%INOZPA (ydfa%JPXIND), &
121 & yddfp%ZSINLA (ydfa%JPXGEO), yddfp%ZAHYBR (0:ydfa%JPXNIV), &
122 & yddfp%ZBHYBR (0:ydfa%JPXNIV), yddfp%IDATEF (ydfa%JPLDAT*2))
123 
124 CALL facies_mt (ydfa, &
125 & yddfp%CNOMC, yddfp%ITYPTR, yddfp%ZSLAPO, yddfp%ZCLOPO, &
126 & yddfp%ZSLOPO, yddfp%ZCODIL, yddfp%ITRONC, yddfp%INLATI, &
127 & yddfp%INXLON, yddfp%INLOPA, yddfp%INOZPA, yddfp%ZSINLA, &
128 & yddfp%INIVER, yddfp%ZREFER, yddfp%ZAHYBR, yddfp%ZBHYBR, &
129 & yddfp%LGARD)
130 
131 CALL fadiex_mt (ydfa, kerr, kunit, yddfp%IDATEF)
132 
133 yddfp%IULOUT_FA = ydfa%NULOUT
134 yddfp%IULOUT_LFI = ydfa%LFI%NULOUT
135 
136 IF (.NOT. ydfa%LIXLAP) THEN
137  yddfp%XLAP1D => ydfa%XLAP1D
138  yddfp%XLAP1DA => ydfa%XLAP1DA
139  yddfp%XLAP2D => ydfa%XLAP2D
140  yddfp%XLAP2DA => ydfa%XLAP2DA
141 ENDIF
142 
143 CALL faregu (kunit, 'EXTERN', yddfp%IEXTERN, 0_jpim)
144 clmodel = 'CMODEL='
145 ival = 1_jpim
146 CALL faregu (kunit, clmodel, ival, 0_jpim)
147 yddfp%CMODEL = clmodel(8:)
148 
149 CALL faregu (kunit, 'IDCEN', yddfp%NIDCEN, 0_jpim)
150 
151 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUP1',1,zhook_handle)
152 
153 END SUBROUTINE fadup1
154 
155 SUBROUTINE fadup2 (YDFA, YDDFP, KUNIT, KERR)
157 ! Create FA library and re-open the file
158 
159 TYPE(fa_com) :: YDFA
160 TYPE(fadup_params), INTENT (IN) :: YDDFP
161 INTEGER (KIND=JPIM),INTENT (IN) :: KUNIT
162 INTEGER (KIND=JPIM),INTENT (OUT) :: KERR
163 
164 INTEGER (KIND=JPIM) :: INBARP, INBARI
165 REAL (KIND=JPRB) :: ZHOOK_HANDLE
166 
167 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUP2',0,zhook_handle)
168 
169 inbarp = 0
170 inbari = 0
171 
172 CALL new_fa (ydfa, kerr, yddfp%IPXTRO, yddfp%IPXLAT, &
173 & yddfp%IPXNIV, yddfp%IPNXFA, yddfp%IPNXCA)
174 
175 ydfa%NULOUT = yddfp%IULOUT_FA
176 ydfa%LFI%NULOUT = yddfp%IULOUT_LFI
177 ydfa%NIDCEN = yddfp%NIDCEN
178 
179 CALL fagiot_mt (ydfa, &
180 & yddfp%INGRIB, yddfp%INBPDG, yddfp%INBCSP, &
181 & yddfp%ISTRON, yddfp%IPUILA, yddfp%IDMOPL)
182 
183 CALL facade_mt (ydfa, &
184 & yddfp%CNOMC, yddfp%ITYPTR, yddfp%ZSLAPO, yddfp%ZCLOPO, &
185 & yddfp%ZSLOPO, yddfp%ZCODIL, yddfp%ITRONC, yddfp%INLATI, &
186 & yddfp%INXLON, yddfp%INLOPA, yddfp%INOZPA, yddfp%ZSINLA, &
187 & yddfp%INIVER, yddfp%ZREFER, yddfp%ZAHYBR, yddfp%ZBHYBR, &
188 & yddfp%LGARD)
189 
190 IF (yddfp%LOUVR) THEN
191  CALL lfiafm_mt (ydfa%LFI, kerr, kunit, yddfp%IFACT)
192  CALL faitou_mt (ydfa, kerr, kunit, yddfp%LNOMM, yddfp%CNOMF, &
193 & yddfp%CSTTU, yddfp%LERFA, yddfp%LIMST, yddfp%INIMES, &
194  inbarp, inbari, yddfp%CNOMC)
195 ELSE
196  CALL fanouv_mt (ydfa, kerr, kunit, yddfp%LNOMM, yddfp%CNOMF, &
197 & yddfp%CSTTU, yddfp%LERFA, yddfp%LIMST, yddfp%INIMES, &
198 & inbarp, inbari, yddfp%CNOMC)
199 ENDIF
200 
201 IF (.NOT. yddfp%LOUVR) THEN
202  CALL fandax_mt (ydfa, kerr, kunit, yddfp%IDATEF)
203 ENDIF
204 
205 
206 ydfa%XLAP1D => yddfp%XLAP1D
207 ydfa%XLAP1DA => yddfp%XLAP1DA
208 ydfa%XLAP2D => yddfp%XLAP2D
209 ydfa%XLAP2DA => yddfp%XLAP2DA
210 ydfa%LIXLAP = &
211  & .NOT.(ASSOCIATED (ydfa%XLAP1D) &
212  & .AND. ASSOCIATED (ydfa%XLAP1DA) &
213  & .AND. ASSOCIATED (ydfa%XLAP2D) &
214  & .AND. ASSOCIATED (ydfa%XLAP2DA))
215 
216 CALL faregu_mt (ydfa, kunit, 'EXTERN', yddfp%IEXTERN, 1_jpim)
217 CALL faregu_mt (ydfa, kunit, 'CMODEL='//trim(yddfp%CMODEL), 1_jpim, 1_jpim)
218 CALL faregu_mt (ydfa, kunit, 'IDCEN', yddfp%NIDCEN, 1_jpim)
219 
220 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUP2',1,zhook_handle)
221 
222 END SUBROUTINE fadup2
223 
224 SUBROUTINE fadupn1 (YDDFP, KUNIT)
226 
227 type(fadup_params), POINTER :: yddfp(:)
228 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
229 
230 INTEGER (KIND=JPIM) :: NTID, ITID
231 
232 REAL (KIND=JPRB) :: ZHOOK_HANDLE
233 
234 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN1',0,zhook_handle)
235 
236 ntid = oml_num_threads()
237 
238 ALLOCATE (yddfp(ntid))
239 
240 DO itid = 1, ntid
241  CALL fadupu1 (yddfp(itid), kunit)
242 ENDDO
243 
244 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN1',1,zhook_handle)
245 
246 END SUBROUTINE fadupn1
247 
248 SUBROUTINE fadupn2 (YDFA, YDDFP, KUNIT)
250 USE fa_mod, ONLY : fa_com_default, fa_com
251 
252 type(fa_com), POINTER :: ydfa
253 type(fadup_params), POINTER :: yddfp(:)
254 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
255 
256 INTEGER (KIND=JPIM) :: ITID
257 
258 REAL (KIND=JPRB) :: ZHOOK_HANDLE
259 
260 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN2',0,zhook_handle)
261 
262 itid = oml_my_thread()
263 
264 ALLOCATE (ydfa)
265 
266 CALL fadupu2 (ydfa, yddfp(itid), kunit)
267 
268 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN2',1,zhook_handle)
269 
270 END SUBROUTINE fadupn2
271 
272 SUBROUTINE fadupn3 (YDFA, YDDFP, KUNIT)
274 
275 type(fa_com), POINTER :: ydfa
276 type(fadup_params), POINTER :: yddfp(:)
277 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
278 
279 INTEGER (KIND=JPIM) :: IREP
280 INTEGER (KIND=JPIM) :: ITID
281 REAL (KIND=JPRB) :: ZHOOK_HANDLE
282 
283 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN3',0,zhook_handle)
284 
285 itid = oml_my_thread()
286 
287 IF (yddfp(itid)%LOUVR) THEN
288  CALL fairme_mt (ydfa, irep, kunit, 'KEEP')
289 ELSE
290  CALL fairno_mt (ydfa, irep, kunit, 'KEEP')
291 ENDIF
292 
293 CALL fadupu3 (ydfa, yddfp(itid))
294 
295 DEALLOCATE (ydfa)
296 
297 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN3',1,zhook_handle)
298 
299 END SUBROUTINE fadupn3
300 
301 SUBROUTINE fadupn4 (YDDFP)
303 
304 type(fadup_params), POINTER :: yddfp(:)
305 
306 INTEGER (KIND=JPIM) :: NTID, ITID
307 
308 REAL (KIND=JPRB) :: ZHOOK_HANDLE
309 
310 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN4',0,zhook_handle)
311 
312 ntid = oml_num_threads()
313 
314 DO itid = 1, ntid
315  CALL fadupu4 (yddfp(itid))
316 ENDDO
317 
318 DEALLOCATE (yddfp)
319 
320 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPN4',1,zhook_handle)
321 
322 END SUBROUTINE fadupn4
323 
324 SUBROUTINE fadupu1 (YDDFP, KUNIT)
326 USE lfimod, ONLY : lficom
327 
328 type(fadup_params), INTENT (OUT) :: yddfp
329 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
330 
331 INTEGER (KIND=JPIM) :: IERR
332 
333 REAL (KIND=JPRB) :: ZHOOK_HANDLE
334 
335 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU1',0,zhook_handle)
336 
337 CALL fadup1 (fa_com_default, yddfp, kunit, ierr)
338 
339 yddfp%IPNXFA = 1
340 yddfp%IPNXCA = 1
341 yddfp%LGARD = .false.
342 
343 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU1',1,zhook_handle)
344 
345 END SUBROUTINE fadupu1
346 
347 SUBROUTINE fadupu2 (YDFA, YDDFP, KUNIT)
348 USE lfimod, ONLY : new_lfi
349 
350 type(fa_com) :: ydfa
351 type(fadup_params), INTENT (IN) :: yddfp
352 INTEGER (KIND=JPIM), INTENT (IN) :: KUNIT
353 
354 INTEGER (KIND=JPIM) :: IERR
355 
356 REAL (KIND=JPRB) :: ZHOOK_HANDLE
357 
358 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU2',0,zhook_handle)
359 
360 ALLOCATE (ydfa%LFI)
361 
362 CALL new_lfi (ydfa%LFI, ierr, kpnxfi=yddfp%IFACT)
363 
364 CALL fadup2 (ydfa, yddfp, kunit, ierr)
365 ydfa%LOPENMP = .false.
366 
367 
368 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU2',1,zhook_handle)
369 
370 END SUBROUTINE fadupu2
371 
372 SUBROUTINE fadupu3 (YDFA, YDDFP)
373 USE lfimod, ONLY : free_lfi
374 USE fa_mod, ONLY : free_fa
375 
376 type(fa_com) :: ydfa
377 type(fadup_params), INTENT (INOUT) :: yddfp
378 
379 INTEGER (KIND=JPIM) :: IERR
380 
381 REAL (KIND=JPRB) :: ZHOOK_HANDLE
382 
383 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU3',0,zhook_handle)
384 
385 IF (ASSOCIATED (ydfa%XLAP1D, yddfp%XLAP1D)) ydfa%XLAP1D => null()
386 IF (ASSOCIATED (ydfa%XLAP1DA, yddfp%XLAP1DA)) ydfa%XLAP1DA => null()
387 IF (ASSOCIATED (ydfa%XLAP2D, yddfp%XLAP2D)) ydfa%XLAP2D => null()
388 IF (ASSOCIATED (ydfa%XLAP2DA, yddfp%XLAP2DA)) ydfa%XLAP2DA => null()
389 ydfa%LIXLAP = .true.
390 
391 CALL free_fa (ydfa, ierr)
392 CALL free_lfi (ydfa%LFI, ierr)
393 DEALLOCATE (ydfa%LFI)
394 NULLIFY (ydfa%LFI)
395 
396 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU3',1,zhook_handle)
397 
398 END SUBROUTINE fadupu3
399 
400 SUBROUTINE fadupu4 (YDDFP)
402 type(fadup_params), INTENT (INOUT) :: yddfp
403 
404 REAL (KIND=JPRB) :: ZHOOK_HANDLE
405 
406 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU4',0,zhook_handle)
407 
408 DEALLOCATE (yddfp%INLOPA, yddfp%INOZPA, yddfp%ZSINLA, &
409 & yddfp%ZAHYBR, yddfp%ZBHYBR, yddfp%IDATEF)
410 
411 NULLIFY (yddfp%INLOPA, yddfp%INOZPA, yddfp%ZSINLA, &
412 & yddfp%ZAHYBR, yddfp%ZBHYBR, yddfp%IDATEF)
413 
414 NULLIFY (yddfp%XLAP1D, yddfp%XLAP1DA, yddfp%XLAP2D, yddfp%XLAP2DA)
415 
416 IF (lhook) CALL dr_hook ('FADUP_MOD:FADUPU4',1,zhook_handle)
417 
418 END SUBROUTINE fadupu4
419 
420 END MODULE fadup_mod
421 
subroutine fagiot_mt(FA, KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagiot.F90:235
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine fadupu4(YDDFP)
Definition: fadup_mod.F90:401
subroutine fadupu3(YDFA, YDDFP)
Definition: fadup_mod.F90:373
integer, parameter jpim
Definition: parkind1.F90:13
subroutine fanouv_mt(FA, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: fanouv.F90:396
subroutine faiopt_mt(FA, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, CDNOMC)
Definition: faiopt.F90:156
subroutine, private fadup2(YDFA, YDDFP, KUNIT, KERR)
Definition: fadup_mod.F90:156
subroutine fadiex_mt(FA, KREP, KNUMER, KDATEF)
Definition: fadiex.F90:156
subroutine fairno_mt(FA, KREP, KNUMER, CDSTTU)
Definition: fairno.F90:237
subroutine new_lfi(LFI, KERR, KPNXFI, KPFACX)
Definition: lfimod.F90:391
subroutine fadupn1(YDDFP, KUNIT)
Definition: fadup_mod.F90:225
subroutine free_fa(FA, KERR)
Definition: fa_mod.F90:780
subroutine fadupn3(YDFA, YDDFP, KUNIT)
Definition: fadup_mod.F90:273
Definition: fa_mod.F90:1
subroutine fairme_mt(FA, KREP, KNUMER, CDSTTU)
Definition: fairme.F90:251
subroutine faregu(KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:499
subroutine, private fadup1(YDFA, YDDFP, KUNIT, KERR)
Definition: fadup_mod.F90:88
subroutine faitou_mt(FA, KREP, KNUMER, LDNOMM, CDNOMF, CDSTTU, LDERFA, LDIMST, KNIMES, KNBARP, KNBARI, CDNOMC)
Definition: faitou.F90:769
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfiofm_mt(LFI, KREP, KNUMER, KFACTM, LDOUVR)
Definition: lfiofm.F90:181
subroutine fadupn2(YDFA, YDDFP, KUNIT)
Definition: fadup_mod.F90:249
subroutine facies_mt(FA, CDNOMC, KTYPTR, PSLAPO, PCLOPO, PSLOPO, PCODIL, KTRONC, KNLATI, KNXLON, KNLOPA, KNOZPA, PSINLA, KNIVER, PREFER, PAHYBR, PBHYBR, LDGARD)
Definition: facies.F90:313
subroutine facade_mt(FA, CDNOMC, KTYPTR, PSLAPO, PCLOPO, PSLOPO, PCODIL, KTRONC, KNLATI, KNXLON, KNLOPA, KNOZPA, PSINLA, KNIVER, PREFER, PAHYBR, PBHYBR, LDGARD)
Definition: facade.F90:281
subroutine new_fa(FA, KERR, KPXTRO, KPXLAT, KPXNIV, KPNXFA, KPNXCA)
Definition: fa_mod.F90:668
integer(kind=jpim) function, public oml_my_thread()
Definition: oml_mod.F90:249
subroutine faregu_mt(FA, KNUMER, CDCLEF, KVAL, KOPT)
Definition: faregu.F90:519
logical lhook
Definition: yomhook.F90:15
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine fadupu2(YDFA, YDDFP, KUNIT)
Definition: fadup_mod.F90:348
subroutine free_lfi(LFI, KERR)
Definition: lfimod.F90:605
Definition: lfimod.F90:1
subroutine favori_mt(FA, KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA, KDMOPL)
Definition: favori.F90:150
subroutine lfiafm_mt(LFI, KREP, KNUMER, KFACTM)
Definition: lfiafm.F90:239
subroutine fadupu1(YDDFP, KUNIT)
Definition: fadup_mod.F90:325
subroutine fandax_mt(FA, KREP, KNUMER, KDATEF)
Definition: fandax.F90:187
subroutine fadupn4(YDDFP)
Definition: fadup_mod.F90:302