Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / write_surf.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !##################
6 MODULE MODI_WRITE_SURF
7 !##################
8 !
9   INTERFACE WRITE_SURF
10 !
11      SUBROUTINE WRITE_SURFX0(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT)
12  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM ! calling program
13  CHARACTER(LEN=*),  INTENT(IN) :: HREC     ! name of the article to be written
14 REAL,              INTENT(IN) :: PFIELD   ! real scalar to be written
15 INTEGER,           INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears 
16  CHARACTER(LEN=100),INTENT(IN) :: HCOMMENT ! Comment string
17 !
18 END SUBROUTINE WRITE_SURFX0
19 !
20      SUBROUTINE WRITE_SURFX1(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
21  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
22  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
23 REAL, DIMENSION(:), INTENT(IN)  :: PFIELD   ! array containing the data field
24 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
25  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
26  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
27 !                                             ! 'H' : field with
28 !                                             !       horizontal spatial dim.
29 !                                             ! '-' : no horizontal dim.
30 END SUBROUTINE WRITE_SURFX1
31 !
32      SUBROUTINE WRITE_SURFX2(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
33  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM ! calling program
34  CHARACTER(LEN=*),     INTENT(IN)  :: HREC     ! name of the article to be written
35 REAL, DIMENSION(:,:), INTENT(IN)  :: PFIELD   ! array containing the data field
36 INTEGER,              INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
37  CHARACTER(LEN=100),   INTENT(IN)  :: HCOMMENT ! Comment string
38  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
39 !                                             ! 'H' : field with
40 !                                             !       horizontal spatial dim.
41 !                                             ! '-' : no horizontal dim.
42 END SUBROUTINE WRITE_SURFX2
43 !
44       SUBROUTINE WRITE_SURFX2COV(HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
45  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM ! calling program
46  CHARACTER(LEN=*),     INTENT(IN)  :: HREC     ! name of the article to be read
47 REAL, DIMENSION(:,:), INTENT(IN)  :: PFIELD   ! array containing the data field
48 LOGICAL,DIMENSION(:), INTENT(IN)  :: OFLAG  ! mask for array filling
49 INTEGER,              INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
50  CHARACTER(LEN=100),   INTENT(IN)  :: HCOMMENT ! Comment string
51  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
52 !                                             ! 'H' : field with
53 !                                             !       horizontal spatial dim.
54 !                                             ! '-' : no horizontal dim.
55 END SUBROUTINE WRITE_SURFX2COV
56 !
57      SUBROUTINE WRITE_SURFN0(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT)
58  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
59  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
60 INTEGER,            INTENT(IN)  :: KFIELD   ! integer to be written
61 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
62  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
63 !
64 END SUBROUTINE WRITE_SURFN0
65 !
66      SUBROUTINE WRITE_SURFN1(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
67  CHARACTER(LEN=6),      INTENT(IN)  :: HPROGRAM ! calling program
68  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be written
69 INTEGER, DIMENSION(:), INTENT(IN)  :: KFIELD   ! integer to be written
70 INTEGER,               INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
71  CHARACTER(LEN=100),    INTENT(IN)  :: HCOMMENT ! Comment string
72  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
73 !                                             ! 'H' : field with
74 !                                             !       horizontal spatial dim.
75 !                                             ! '-' : no horizontal dim.
76 END SUBROUTINE WRITE_SURFN1
77 !
78      SUBROUTINE WRITE_SURFC0(HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT)
79  CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM ! calling program
80  CHARACTER(LEN=*),    INTENT(IN)  :: HREC     ! name of the article to be written
81  CHARACTER(LEN=*),    INTENT(IN)  :: HFIELD   ! caracter to be written
82 INTEGER,             INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
83  CHARACTER(LEN=100),  INTENT(IN)  :: HCOMMENT ! Comment string
84 !
85 END SUBROUTINE WRITE_SURFC0
86 !
87       SUBROUTINE WRITE_SURFL0(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT)
88  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
89  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
90 LOGICAL,            INTENT(IN)  :: OFIELD   ! array containing the data field
91 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
92  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
93 !
94 END SUBROUTINE WRITE_SURFL0
95 !
96       SUBROUTINE WRITE_SURFL1(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
97  CHARACTER(LEN=6),      INTENT(IN)  :: HPROGRAM ! calling program
98  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be written
99 LOGICAL, DIMENSION(:), INTENT(IN)  :: OFIELD   ! array containing the data field
100 INTEGER,               INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
101  CHARACTER(LEN=100),    INTENT(IN)  :: HCOMMENT ! Comment string
102  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
103 !                                             ! 'H' : field with
104 !                                             !       horizontal spatial dim.
105 !                                             ! '-' : no horizontal dim.
106 END SUBROUTINE WRITE_SURFL1
107 !
108       SUBROUTINE WRITE_SURFT0(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
109 !
110 USE MODD_TYPE_DATE_SURF
111 !
112  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
113  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
114 TYPE (DATE_TIME),   INTENT(IN)  :: TFIELD   ! array containing the data field
115 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
116  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
117 !
118 END SUBROUTINE WRITE_SURFT0
119 !
120       SUBROUTINE WRITE_SURFT1(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
121 !
122 USE MODD_TYPE_DATE_SURF
123 !
124  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
125  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
126 TYPE (DATE_TIME), DIMENSION(:), INTENT(IN)  :: TFIELD   ! array containing the data field
127 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
128  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
129 !
130 END SUBROUTINE WRITE_SURFT1
131 !
132       SUBROUTINE WRITE_SURFT2(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
133 !
134 USE MODD_TYPE_DATE_SURF
135 !
136  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
137  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
138 TYPE (DATE_TIME), DIMENSION(:,:), INTENT(IN)  :: TFIELD   ! array containing the data field
139 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
140  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
141 !
142 END SUBROUTINE WRITE_SURFT2
143 !
144 END INTERFACE
145 !
146 END MODULE MODI_WRITE_SURF
147 !
148 !     #############################################################
149       SUBROUTINE WRITE_SURFX0(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT)
150 !     #############################################################
151 !
152 !!****  *WRITEX0* - routine to write a real scalar
153 !
154 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
155 USE PARKIND1  ,ONLY : JPRB
156 !
157 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
158 !
159 #ifdef OL
160 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURF0_OL, WRITE_SURF0_TIME_OL
161 #endif
162 #ifdef LFI
163 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURF0_LFI
164 #endif
165 #ifdef TXT
166 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURF0_TXT
167 #endif
168 #ifdef BIN
169 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURF0_BIN
170 #endif
171 #ifdef ASC
172 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURF0_ASC
173 #endif
174 #ifdef FA
175 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURF0_FA
176 #endif
177 #ifdef MNH
178 USE MODI_WRITE_SURFX0_MNH
179 #endif
180 !
181 USE MODI_TEST_RECORD_LEN
182 !
183 IMPLICIT NONE
184 !
185 #ifndef NOMPI
186 INCLUDE "mpif.h"
187 #endif
188 !
189 !*      0.1   Declarations of arguments
190 !
191  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM ! calling program
192  CHARACTER(LEN=*),  INTENT(IN) :: HREC     ! name of the article to be written
193 REAL,              INTENT(IN) :: PFIELD   ! real scalar to be written
194 INTEGER,           INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears 
195  CHARACTER(LEN=100),INTENT(IN) :: HCOMMENT ! Comment string
196 !
197 !*      0.2   Declarations of local variables
198 !
199  CHARACTER(LEN=LEN_HREC)  :: YREC
200 LOGICAL :: LNOWRITE
201 REAL   :: XTIME0
202 REAL(KIND=JPRB) :: ZHOOK_HANDLE
203 !
204 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX0',0,ZHOOK_HANDLE)
205 !
206 YREC = HREC
207 !
208  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
209 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX0',1,ZHOOK_HANDLE)
210 IF(LNOWRITE)RETURN
211 !
212 IF (HPROGRAM=='MESONH') THEN
213 #ifdef MNH
214   CALL WRITE_SURFX0_MNH(YREC,PFIELD,KRESP,HCOMMENT)
215 #endif
216 ENDIF
217 !
218 IF (HPROGRAM=='AROME ') THEN
219 #ifdef ARO
220   CALL WRITE_SURFX0_ARO(YREC,PFIELD,KRESP,HCOMMENT)
221 #endif
222 ENDIF
223 !
224 IF (NRANK==NPIO) THEN
225   !
226 #ifndef NOMPI
227   XTIME0 = MPI_WTIME()
228 #endif  
229   !
230 !$OMP SINGLE
231   !
232   IF (HPROGRAM=='ASCII ') THEN
233 #ifdef ASC
234     CALL WRITE_SURF0_ASC(YREC,PFIELD,KRESP,HCOMMENT)
235 #endif
236   ENDIF
237   !
238   IF (HPROGRAM=='FA    ') THEN
239 #ifdef FA
240     CALL WRITE_SURF0_FA(YREC,PFIELD,KRESP,HCOMMENT)
241 #endif
242   ENDIF
243   !
244   IF (HPROGRAM=='OFFLIN') THEN
245 #ifdef OL
246     IF (YREC=='time') THEN
247       CALL WRITE_SURF0_TIME_OL(PFIELD,KRESP,HCOMMENT)
248     ELSE
249       CALL WRITE_SURF0_OL(YREC,PFIELD,KRESP,HCOMMENT)
250     ENDIF
251 #endif
252   ENDIF
253   !
254   IF (HPROGRAM=='TEXTE ') THEN
255 #ifdef TXT
256     CALL WRITE_SURF0_TXT(YREC,PFIELD,KRESP,HCOMMENT)
257 #endif
258   ENDIF
259   !
260   IF (HPROGRAM=='BINARY') THEN
261 #ifdef BIN
262     CALL WRITE_SURF0_BIN(YREC,PFIELD,KRESP,HCOMMENT)
263 #endif
264   ENDIF
265   !
266   IF (HPROGRAM=='LFI   ') THEN
267 #ifdef LFI
268     CALL WRITE_SURF0_LFI(YREC,PFIELD,KRESP,HCOMMENT)
269 #endif
270   ENDIF
271   !
272 !$OMP END SINGLE
273   !
274 #ifndef NOMPI
275   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
276 #endif
277   !
278 ENDIF
279 !
280 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX0',1,ZHOOK_HANDLE)
281 !
282 END SUBROUTINE WRITE_SURFX0
283 !
284 !     #############################################################
285       SUBROUTINE WRITE_SURFX1(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
286 !     #############################################################
287 !
288 !!****  *WRITEX1* - routine to fill a real 1D array for the externalised surface 
289 !
290 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
291 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
292 USE PARKIND1  ,ONLY : JPRB
293 !
294 #ifdef OL
295 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFN_OL
296 #endif
297 #ifdef ASC
298 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFN_ASC
299 #endif
300 #ifdef TXT
301 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFN_TXT
302 #endif
303 #ifdef BIN
304 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFN_BIN
305 #endif
306 #ifdef FA
307 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFN_FA
308 #endif
309 #ifdef LFI
310 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFN_LFI
311 #endif
312 #ifdef MNH
313 USE MODI_WRITE_SURFX1_MNH
314 #endif
315 !
316 USE MODI_TEST_RECORD_LEN
317 !
318 IMPLICIT NONE
319 !
320 !*      0.1   Declarations of arguments
321 !
322  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
323  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
324 REAL, DIMENSION(:), INTENT(IN)  :: PFIELD   ! array containing the data field
325 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
326  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
327  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
328 !                                             ! 'H' : field with
329 !                                             !       horizontal spatial dim.
330 !                                             ! '-' : no horizontal dim.
331 !*      0.2   Declarations of local variables
332 !
333  CHARACTER(LEN=LEN_HREC)  :: YREC
334 INTEGER            :: IL
335  CHARACTER(LEN=1)   :: YDIR
336 LOGICAL :: LNOWRITE
337 REAL(KIND=JPRB) :: ZHOOK_HANDLE
338 !
339 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX1',0,ZHOOK_HANDLE)
340 !
341 YREC = HREC
342 YDIR = 'H'
343 IF (PRESENT(HDIR)) YDIR = HDIR
344 IL = SIZE(PFIELD)
345 !
346  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
347 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX1',1,ZHOOK_HANDLE)
348 IF(LNOWRITE)RETURN
349 !
350 IF (HPROGRAM=='MESONH') THEN
351 #ifdef MNH
352   CALL WRITE_SURFX1_MNH(YREC,IL,PFIELD,KRESP,HCOMMENT,YDIR)
353 #endif
354 ENDIF
355 !
356 IF (HPROGRAM=='AROME ') THEN
357 #ifdef ARO
358   CALL WRITE_SURFX1_ARO(YREC,IL,PFIELD,KRESP,HCOMMENT,YDIR)
359 #endif
360 ENDIF
361 !
362 IF (HPROGRAM=='OFFLIN') THEN
363 #ifdef OL
364   CALL WRITE_SURFN_OL(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
365 #endif
366 ENDIF
367 !
368 IF (HPROGRAM=='TEXTE ') THEN
369 #ifdef TXT
370   CALL WRITE_SURFN_TXT(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
371 #endif
372 ENDIF
373 !
374 IF (HPROGRAM=='BINARY') THEN
375 #ifdef BIN
376   CALL WRITE_SURFN_BIN(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
377 #endif
378 ENDIF
379 !
380 IF (HPROGRAM=='LFI   ') THEN
381 #ifdef LFI
382   CALL WRITE_SURFN_LFI(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
383 #endif
384 ENDIF
385 !
386 IF (HPROGRAM=='ASCII ') THEN
387 #ifdef ASC
388   CALL WRITE_SURFN_ASC(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
389 #endif
390 ENDIF
391 !
392 IF (HPROGRAM=='FA    ') THEN
393 #ifdef FA
394   CALL WRITE_SURFN_FA(YREC,IL,PFIELD,KRESP,HCOMMENT,YDIR)
395 #endif
396 ENDIF
397 !
398 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX1',1,ZHOOK_HANDLE)
399 !
400 END SUBROUTINE WRITE_SURFX1
401 !
402 !     #############################################################
403       SUBROUTINE WRITE_SURFX2(HPROGRAM,HREC,PFIELD,KRESP,HCOMMENT,HDIR)
404 !     #############################################################
405 !
406 !!****  *WRITEX2* - routine to fill a real 2D array for the externalised surface 
407 !
408 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
409 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
410 USE PARKIND1  ,ONLY : JPRB
411 !
412 #ifdef OL
413 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFN_OL
414 #endif
415 #ifdef TXT
416 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFN_TXT
417 #endif
418 #ifdef BIN
419 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFN_BIN
420 #endif
421 #ifdef LFI
422 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFN_LFI
423 #endif
424 #ifdef ASC
425 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFN_ASC
426 #endif
427 #ifdef FA
428 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFN_FA
429 #endif
430 #ifdef MNH
431 USE MODI_WRITE_SURFX2_MNH
432 #endif
433 !
434 USE MODI_TEST_RECORD_LEN
435 !
436 IMPLICIT NONE
437 !
438 !*      0.1   Declarations of arguments
439 !
440  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM ! calling program
441  CHARACTER(LEN=*),     INTENT(IN)  :: HREC     ! name of the article to be written
442 REAL, DIMENSION(:,:), INTENT(IN)  :: PFIELD   ! array containing the data field
443 INTEGER,              INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
444  CHARACTER(LEN=100),   INTENT(IN)  :: HCOMMENT ! Comment string
445  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
446 !                                             ! 'H' : field with
447 !                                             !       horizontal spatial dim.
448 !                                             ! '-' : no horizontal dim.
449 !*      0.2   Declarations of local variables
450 !
451  CHARACTER(LEN=LEN_HREC)  :: YREC
452 INTEGER            :: IL1
453 INTEGER            :: IL2
454  CHARACTER(LEN=1)   :: YDIR
455 LOGICAL :: LNOWRITE
456 REAL(KIND=JPRB) :: ZHOOK_HANDLE
457 !
458 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX2',0,ZHOOK_HANDLE)
459 !
460 YREC = HREC
461 YDIR = 'H'
462 IF (PRESENT(HDIR)) YDIR = HDIR
463 IL1  = SIZE(PFIELD,1)
464 IL2  = SIZE(PFIELD,2)
465 !
466  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
467 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX2',1,ZHOOK_HANDLE)
468 IF(LNOWRITE)RETURN
469 !
470 IF (HPROGRAM=='MESONH') THEN
471 #ifdef MNH
472   CALL WRITE_SURFX2_MNH(YREC,IL1,IL2,PFIELD,KRESP,HCOMMENT,YDIR)
473 #endif
474 ENDIF
475 !
476 IF (HPROGRAM=='AROME ') THEN
477 #ifdef ARO
478   CALL WRITE_SURFX2_ARO(YREC,IL1,IL2,PFIELD,KRESP,HCOMMENT,YDIR)
479 #endif
480 ENDIF
481 !
482 IF (HPROGRAM=='OFFLIN') THEN
483 #ifdef OL
484   CALL WRITE_SURFN_OL(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
485 #endif
486 ENDIF
487 !
488 IF (HPROGRAM=='TEXTE ') THEN
489 #ifdef TXT
490   CALL WRITE_SURFN_TXT(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
491 #endif
492 ENDIF
493 !
494 IF (HPROGRAM=='BINARY') THEN
495 #ifdef BIN
496   CALL WRITE_SURFN_BIN(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
497 #endif
498 ENDIF
499 !
500 IF (HPROGRAM=='LFI   ') THEN
501 #ifdef LFI
502   CALL WRITE_SURFN_LFI(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
503 #endif
504 ENDIF
505 !
506 IF (HPROGRAM=='ASCII ') THEN
507 #ifdef ASC
508   CALL WRITE_SURFN_ASC(YREC,PFIELD,KRESP,HCOMMENT,YDIR)
509 #endif
510 ENDIF
511 !
512 IF (HPROGRAM=='FA    ') THEN
513 #ifdef FA
514   CALL WRITE_SURFN_FA(YREC,IL1,IL2,PFIELD,KRESP,HCOMMENT,YDIR)
515 #endif
516 ENDIF
517 !
518 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX2',1,ZHOOK_HANDLE)
519 !
520 END SUBROUTINE WRITE_SURFX2
521 !
522 !     #############################################################
523       SUBROUTINE WRITE_SURFX2COV(HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
524 !     #############################################################
525 !
526 !!****  *READX2* - routine to fill a real 2D array for the externalised surface 
527 !
528 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
529 #ifdef OL
530 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFN_OL
531 #endif
532 #ifdef TXT
533 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFN_TXT
534 #endif
535 #ifdef BIN
536 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFN_BIN
537 #endif
538 #ifdef LFI
539 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFN_LFI, WRITE_SURF0_LFI
540 #endif
541 #ifdef ASC
542 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFN_ASC
543 #endif
544 #ifdef FA
545 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFN_FA
546 #endif
547 #ifdef MNH        
548 USE MODI_WRITE_SURFX2COV_MNH
549 #endif
550 !
551 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
552 USE PARKIND1  ,ONLY : JPRB
553 !
554 IMPLICIT NONE
555 !
556 !*      0.1   Declarations of arguments
557 !
558  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM ! calling program
559  CHARACTER(LEN=*),     INTENT(IN)  :: HREC     ! name of the article to be read
560 REAL, DIMENSION(:,:), INTENT(IN)  :: PFIELD   ! array containing the data field
561 LOGICAL,DIMENSION(:), INTENT(IN)  :: OFLAG  ! mask for array filling
562 INTEGER,              INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
563  CHARACTER(LEN=100),   INTENT(IN)  :: HCOMMENT ! Comment string
564  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
565 !                                             ! 'H' : field with
566 !                                             !       horizontal spatial dim.
567 !                                             ! '-' : no horizontal dim.
568 !*      0.2   Declarations of local variables
569 !
570  CHARACTER(LEN=LEN_HREC)  :: YREC
571  CHARACTER(LEN=100) :: YCOMMENT
572 INTEGER            :: IL1
573 INTEGER            :: IL2
574  CHARACTER(LEN=1)   :: YDIR
575 INTEGER            :: JCOVER
576 REAL(KIND=JPRB) :: ZHOOK_HANDLE
577 !
578 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX2L',0,ZHOOK_HANDLE)
579 !
580 YREC = HREC
581 YDIR = 'H'
582 IF (PRESENT(HDIR)) YDIR = HDIR
583 IL1  = SIZE(PFIELD,1)
584 IL2  = SIZE(PFIELD,2)
585 !
586 IF (HPROGRAM=='MESONH') THEN
587 #ifdef MNH        
588     CALL WRITE_SURFX2COV_MNH(YREC,IL1,IL2,PFIELD,OFLAG,KRESP,HCOMMENT,YDIR)
589 #endif
590 ELSE
591   !
592   IF (HPROGRAM=='LFI   ') THEN
593 #ifdef LFI
594     YREC = 'COVER_PACKED'
595     CALL WRITE_SURF0_LFI(YREC,.FALSE.,KRESP,YCOMMENT)
596 #endif
597   END IF
598   !
599   DO JCOVER=1,IL2
600     !
601     WRITE(YREC,'(A5,I3.3)') 'COVER',JCOVER
602     YCOMMENT='X_Y_'//YREC
603     IF (.NOT. OFLAG(JCOVER)) CYCLE
604     !
605      IF (HPROGRAM=='AROME ') THEN
606 #ifdef ARO        
607       CALL WRITE_SURFX1_ARO(YREC,IL1,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
608 #endif  
609     ENDIF
610     !   
611     IF (HPROGRAM=='OFFLIN') THEN
612 #ifdef OL
613       CALL WRITE_SURFN_OL(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
614 #endif
615     ENDIF
616     !
617     IF (HPROGRAM=='TEXTE ') THEN
618 #ifdef TXT
619       CALL WRITE_SURFN_TXT(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
620 #endif
621     ENDIF
622     !
623     IF (HPROGRAM=='BINARY') THEN
624 #ifdef BIN
625       CALL WRITE_SURFN_TXT(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
626 #endif
627     ENDIF
628     !    
629     IF (HPROGRAM=='LFI   ') THEN
630 #ifdef LFI
631       CALL WRITE_SURFN_LFI(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
632 #endif
633     ENDIF
634     !    
635     IF (HPROGRAM=='ASCII ') THEN
636 #ifdef ASC
637       CALL WRITE_SURFN_ASC(YREC,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
638 #endif
639     ENDIF
640     !
641     IF (HPROGRAM=='FA    ') THEN
642 #ifdef FA
643       CALL WRITE_SURFN_FA(YREC,IL1,PFIELD(:,JCOVER),KRESP,YCOMMENT,YDIR)
644 #endif
645     ENDIF
646     !
647   END DO
648 END IF
649 !
650 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFX2L',1,ZHOOK_HANDLE)
651 !
652 END SUBROUTINE WRITE_SURFX2COV
653 !
654 !     #############################################################
655       SUBROUTINE WRITE_SURFN0(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT)
656 !     #############################################################
657 !
658 !!****  *WRITEN0* - routine to write an integer
659 !
660 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
661 USE PARKIND1  ,ONLY : JPRB
662 !
663 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
664 !
665 #ifdef OL
666 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURF0_OL
667 #endif
668 #ifdef ASC
669 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURF0_ASC
670 #endif
671 #ifdef TXT
672 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURF0_TXT
673 #endif
674 #ifdef BIN
675 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURF0_BIN
676 #endif
677 #ifdef FA
678 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURF0_FA
679 #endif
680 #ifdef LFI
681 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURF0_LFI
682 #endif
683 #ifdef MNH
684 USE MODI_WRITE_SURFN0_MNH
685 #endif
686 !
687 USE MODI_TEST_RECORD_LEN
688 !
689 IMPLICIT NONE
690 !
691 #ifndef NOMPI
692 INCLUDE "mpif.h"
693 #endif
694 !
695 !*      0.1   Declarations of arguments
696 !
697  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
698  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
699 INTEGER,            INTENT(IN)  :: KFIELD   ! integer to be written
700 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
701  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
702 !
703 !*      0.2   Declarations of local variables
704 !
705  CHARACTER(LEN=LEN_HREC)  :: YREC
706 LOGICAL :: LNOWRITE
707 REAL   :: XTIME0
708 REAL(KIND=JPRB) :: ZHOOK_HANDLE
709 !
710 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN0',0,ZHOOK_HANDLE)
711 !
712 YREC = HREC
713 !
714  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
715 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN0',1,ZHOOK_HANDLE)
716 IF(LNOWRITE)RETURN
717
718 !
719 IF (HPROGRAM=='MESONH') THEN
720 #ifdef MNH
721   CALL WRITE_SURFN0_MNH(YREC,KFIELD,KRESP,HCOMMENT)
722 #endif
723 ENDIF
724 !
725 IF (HPROGRAM=='AROME ') THEN
726 #ifdef ARO
727   CALL WRITE_SURFN0_ARO(YREC,KFIELD,KRESP,HCOMMENT)
728 #endif
729 ENDIF
730 !
731 IF (NRANK==NPIO) THEN
732   !
733 #ifndef NOMPI
734   XTIME0 = MPI_WTIME()
735 #endif
736   !
737 !$OMP SINGLE
738 !  
739   IF (HPROGRAM=='ASCII ') THEN
740 #ifdef ASC
741     CALL WRITE_SURF0_ASC(YREC,KFIELD,KRESP,HCOMMENT)
742 #endif
743   ENDIF
744   !
745   IF (HPROGRAM=='FA    ') THEN
746 #ifdef FA
747     CALL WRITE_SURF0_FA(YREC,KFIELD,KRESP,HCOMMENT)
748 #endif
749   ENDIF
750   !
751   IF (HPROGRAM=='OFFLIN') THEN
752 #ifdef OL
753     CALL WRITE_SURF0_OL(YREC,KFIELD,KRESP,HCOMMENT)
754 #endif
755   ENDIF
756   !
757   IF (HPROGRAM=='TEXTE ') THEN
758 #ifdef TXT
759     CALL WRITE_SURF0_TXT(YREC,KFIELD,KRESP,HCOMMENT)
760 #endif
761   ENDIF
762   !
763   IF (HPROGRAM=='BINARY') THEN
764 #ifdef BIN
765     CALL WRITE_SURF0_BIN(YREC,KFIELD,KRESP,HCOMMENT)
766 #endif
767   ENDIF
768   !
769   IF (HPROGRAM=='LFI   ') THEN
770 #ifdef LFI
771     CALL WRITE_SURF0_LFI(YREC,KFIELD,KRESP,HCOMMENT)
772 #endif
773   ENDIF
774   !
775 !$OMP END SINGLE 
776   !
777 #ifndef NOMPI
778   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
779 #endif
780   !
781 ENDIF
782 !
783 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN0',1,ZHOOK_HANDLE)
784 !
785 END SUBROUTINE WRITE_SURFN0
786
787 !     #############################################################
788       SUBROUTINE WRITE_SURFN1(HPROGRAM,HREC,KFIELD,KRESP,HCOMMENT,HDIR)
789 !     #############################################################
790 !
791 !!****  *WRITEN0* - routine to write an integer
792 !
793 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
794 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
795 USE PARKIND1  ,ONLY : JPRB
796 !
797 #ifdef OL
798 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFN_OL
799 #endif
800 #ifdef ASC
801 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFN_ASC
802 #endif
803 #ifdef TXT
804 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFN_TXT
805 #endif
806 #ifdef BIN
807 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFN_BIN
808 #endif
809 #ifdef FA
810 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFN_FA
811 #endif
812 #ifdef LFI
813 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFN_LFI
814 #endif
815 #ifdef MNH
816 USE MODI_WRITE_SURFN1_MNH
817 #endif
818 !
819 USE MODI_TEST_RECORD_LEN
820 !
821 IMPLICIT NONE
822 !
823 !*      0.1   Declarations of arguments
824 !
825  CHARACTER(LEN=6),      INTENT(IN)  :: HPROGRAM ! calling program
826  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be written
827 INTEGER, DIMENSION(:), INTENT(IN)  :: KFIELD   ! integer to be written
828 INTEGER,               INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
829  CHARACTER(LEN=100),    INTENT(IN)  :: HCOMMENT ! Comment string
830  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
831 !                                             ! 'H' : field with
832 !                                             !       horizontal spatial dim.
833 !                                             ! '-' : no horizontal dim.
834 !*      0.2   Declarations of local variables
835 !
836  CHARACTER(LEN=LEN_HREC)  :: YREC
837 INTEGER            :: IL
838  CHARACTER(LEN=1)   :: YDIR
839 LOGICAL :: LNOWRITE
840 REAL(KIND=JPRB) :: ZHOOK_HANDLE
841 !
842 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN1',0,ZHOOK_HANDLE)
843 !
844 YREC = HREC
845 YDIR = 'H'
846 IF (PRESENT(HDIR)) YDIR = HDIR
847 IL = SIZE(KFIELD)
848 !
849  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
850 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN1',1,ZHOOK_HANDLE)
851 IF(LNOWRITE)RETURN
852 !
853 IF (HPROGRAM=='MESONH') THEN
854 #ifdef MNH
855   CALL WRITE_SURFN1_MNH(YREC,IL,KFIELD,KRESP,HCOMMENT,YDIR)
856 #endif
857 ENDIF
858 !
859 IF (HPROGRAM=='AROME ') THEN
860 #ifdef ARO
861   CALL WRITE_SURFN1_ARO(YREC,IL,KFIELD,KRESP,HCOMMENT,YDIR)
862 #endif
863 ENDIF
864 !
865 IF (HPROGRAM=='OFFLIN') THEN
866 #ifdef OL
867   CALL WRITE_SURFN_OL(YREC,KFIELD,KRESP,HCOMMENT,YDIR)
868 #endif
869 ENDIF
870 !
871 IF (HPROGRAM=='TEXTE ') THEN
872 #ifdef TXT
873   CALL WRITE_SURFN_TXT(YREC,KFIELD,KRESP,HCOMMENT,YDIR)
874 #endif
875 ENDIF
876 !
877 IF (HPROGRAM=='BINARY') THEN
878 #ifdef BIN
879   CALL WRITE_SURFN_BIN(YREC,KFIELD,KRESP,HCOMMENT,YDIR)
880 #endif
881 ENDIF
882 !
883 IF (HPROGRAM=='LFI   ') THEN
884 #ifdef LFI
885   CALL WRITE_SURFN_LFI(YREC,KFIELD,KRESP,HCOMMENT,YDIR)
886 #endif
887 ENDIF
888 !
889 IF (HPROGRAM=='ASCII ') THEN
890 #ifdef ASC
891   CALL WRITE_SURFN_ASC(YREC,KFIELD,KRESP,HCOMMENT,YDIR)
892 #endif
893 ENDIF
894 !
895 IF (HPROGRAM=='FA    ') THEN
896 #ifdef FA
897   CALL WRITE_SURFN_FA(YREC,IL,KFIELD,KRESP,HCOMMENT,YDIR)
898 #endif
899 ENDIF
900 !
901 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFN1',1,ZHOOK_HANDLE)
902 !
903 END SUBROUTINE WRITE_SURFN1
904 !
905 !     #############################################################
906       SUBROUTINE WRITE_SURFC0(HPROGRAM,HREC,HFIELD,KRESP,HCOMMENT)
907 !     #############################################################
908 !
909 !!****  *WRITEC0* - routine to write an integer
910 !
911 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
912 USE PARKIND1  ,ONLY : JPRB
913 !
914 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
915 !
916 #ifdef OL
917 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURF0_OL
918 #endif
919 #ifdef ASC
920 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURF0_ASC
921 #endif
922 #ifdef TXT
923 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURF0_TXT
924 #endif
925 #ifdef BIN
926 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURF0_BIN
927 #endif
928 #ifdef FA
929 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURF0_FA
930 #endif
931 #ifdef LFI
932 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURF0_LFI
933 #endif
934 #ifdef MNH
935 USE MODI_WRITE_SURFC0_MNH
936 #endif
937 !
938 USE MODI_TEST_RECORD_LEN
939 !
940 IMPLICIT NONE
941 !
942 #ifndef NOMPI
943 INCLUDE "mpif.h"
944 #endif
945 !
946 !*      0.1   Declarations of arguments
947 !
948  CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM ! calling program
949  CHARACTER(LEN=*),    INTENT(IN)  :: HREC     ! name of the article to be written
950  CHARACTER(LEN=*),    INTENT(IN)  :: HFIELD   ! caracter to be written
951 INTEGER,             INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
952  CHARACTER(LEN=100),  INTENT(IN)  :: HCOMMENT ! Comment string
953 !
954 !*      0.2   Declarations of local variables
955 !
956  CHARACTER(LEN=LEN_HREC)  :: YREC
957  CHARACTER(LEN=40)  :: YFIELD
958 LOGICAL :: LNOWRITE
959 REAL   :: XTIME0
960 REAL(KIND=JPRB) :: ZHOOK_HANDLE
961 !
962 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFC0',0,ZHOOK_HANDLE)
963 !
964 YREC = HREC
965 YFIELD = "                                        "
966 YFIELD(1:LEN(HFIELD)) = HFIELD
967 !
968  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
969 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFC0',1,ZHOOK_HANDLE)
970 IF(LNOWRITE)RETURN
971 !
972 IF (HPROGRAM=='MESONH') THEN
973 #ifdef MNH
974   CALL WRITE_SURFC0_MNH(YREC,YFIELD,KRESP,HCOMMENT)
975 #endif
976 ENDIF
977 !
978 IF (HPROGRAM=='AROME ') THEN
979 #ifdef ARO
980   CALL WRITE_SURFC0_ARO(YREC,YFIELD,KRESP,HCOMMENT)
981 #endif
982 ENDIF
983 !
984 IF (NRANK==NPIO) THEN
985   !
986 #ifndef NOMPI
987   XTIME0 = MPI_WTIME()
988 #endif
989   !
990 !$OMP SINGLE  
991   !
992   IF (HPROGRAM=='ASCII ') THEN
993 #ifdef ASC
994     CALL WRITE_SURF0_ASC(YREC,YFIELD,KRESP,HCOMMENT)
995 #endif
996   ENDIF
997   !
998   IF (HPROGRAM=='FA    ') THEN
999 #ifdef FA
1000     CALL WRITE_SURF0_FA(YREC,YFIELD,KRESP,HCOMMENT)
1001 #endif
1002   ENDIF
1003   !
1004   IF (HPROGRAM=='OFFLIN') THEN
1005 #ifdef OL
1006     CALL WRITE_SURF0_OL(YREC,YFIELD,KRESP,HCOMMENT)
1007 #endif
1008   ENDIF
1009   !
1010   IF (HPROGRAM=='TEXTE ') THEN
1011 #ifdef TXT
1012     CALL WRITE_SURF0_TXT(YREC,YFIELD,KRESP,HCOMMENT)
1013 #endif
1014   ENDIF
1015   !
1016   IF (HPROGRAM=='BINARY') THEN
1017 #ifdef BIN
1018     CALL WRITE_SURF0_BIN(YREC,YFIELD,KRESP,HCOMMENT)
1019 #endif
1020   ENDIF
1021   !
1022   IF (HPROGRAM=='LFI   ') THEN
1023 #ifdef LFI
1024     CALL WRITE_SURF0_LFI(YREC,YFIELD,KRESP,HCOMMENT)
1025 #endif
1026   ENDIF
1027   !
1028 !$OMP END SINGLE 
1029   !
1030 #ifndef NOMPI
1031   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
1032 #endif
1033   !
1034 ENDIF
1035 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFC0',1,ZHOOK_HANDLE)
1036 !
1037 END SUBROUTINE WRITE_SURFC0
1038 !
1039 !     #############################################################
1040       SUBROUTINE WRITE_SURFL0(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT)
1041 !     #############################################################
1042 !
1043 !!****  *WRITEL0* - routine to write a logical
1044 !
1045 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
1046 USE PARKIND1  ,ONLY : JPRB
1047 !
1048 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
1049 !
1050 #ifdef OL
1051 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURF0_OL
1052 #endif
1053 #ifdef ASC
1054 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURF0_ASC
1055 #endif
1056 #ifdef TXT
1057 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURF0_TXT
1058 #endif
1059 #ifdef BIN
1060 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURF0_BIN
1061 #endif
1062 #ifdef FA
1063 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURF0_FA
1064 #endif
1065 #ifdef LFI
1066 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURF0_LFI
1067 #endif
1068 #ifdef MNH
1069 USE MODI_WRITE_SURFL0_MNH
1070 #endif
1071 !
1072 USE MODI_TEST_RECORD_LEN
1073 !
1074 IMPLICIT NONE
1075 !
1076 #ifndef NOMPI
1077 INCLUDE "mpif.h"
1078 #endif
1079 !
1080 !*      0.1   Declarations of arguments
1081 !
1082  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
1083  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
1084 LOGICAL,            INTENT(IN)  :: OFIELD   ! array containing the data field
1085 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
1086  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
1087 !
1088 !*      0.2   Declarations of local variables
1089 !
1090  CHARACTER(LEN=LEN_HREC)  :: YREC
1091 LOGICAL :: LNOWRITE
1092 REAL   :: XTIME0
1093 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1094 !
1095 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL0',0,ZHOOK_HANDLE)
1096 !
1097 YREC = HREC
1098 !
1099  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
1100 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL0',1,ZHOOK_HANDLE)
1101 IF(LNOWRITE)RETURN
1102 !
1103 IF (HPROGRAM=='MESONH') THEN
1104 #ifdef MNH
1105   CALL WRITE_SURFL0_MNH(YREC,OFIELD,KRESP,HCOMMENT)
1106 #endif
1107 ENDIF
1108 !
1109 IF (HPROGRAM=='AROME ') THEN
1110 #ifdef ARO
1111   CALL WRITE_SURFL0_ARO(YREC,OFIELD,KRESP,HCOMMENT)
1112 #endif
1113 ENDIF
1114 !
1115 IF (NRANK==NPIO) THEN
1116   !
1117 #ifndef NOMPI
1118   XTIME0 = MPI_WTIME() 
1119 #endif 
1120   !
1121 !$OMP SINGLE
1122   !  
1123   IF (HPROGRAM=='ASCII ') THEN
1124 #ifdef ASC
1125     CALL WRITE_SURF0_ASC(YREC,OFIELD,KRESP,HCOMMENT)
1126 #endif
1127   ENDIF
1128   !
1129   IF (HPROGRAM=='FA    ') THEN
1130 #ifdef FA
1131     CALL WRITE_SURF0_FA(YREC,OFIELD,KRESP,HCOMMENT)
1132 #endif
1133   ENDIF
1134   !
1135   IF (HPROGRAM=='OFFLIN') THEN
1136 #ifdef OL
1137     CALL WRITE_SURF0_OL(YREC,OFIELD,KRESP,HCOMMENT)
1138 #endif
1139   ENDIF
1140   !
1141   IF (HPROGRAM=='TEXTE ') THEN
1142 #ifdef TXT
1143     CALL WRITE_SURF0_TXT(YREC,OFIELD,KRESP,HCOMMENT)
1144 #endif
1145   ENDIF
1146   !
1147   IF (HPROGRAM=='BINARY') THEN
1148 #ifdef BIN
1149     CALL WRITE_SURF0_BIN(YREC,OFIELD,KRESP,HCOMMENT)
1150 #endif
1151   ENDIF
1152   !
1153   IF (HPROGRAM=='LFI   ') THEN
1154 #ifdef LFI
1155     CALL WRITE_SURF0_LFI(YREC,OFIELD,KRESP,HCOMMENT)
1156 #endif
1157   ENDIF
1158   !
1159 !$OMP END SINGLE 
1160   !
1161 #ifndef NOMPI
1162   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
1163 #endif
1164   !
1165 ENDIF
1166 !
1167 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL0',1,ZHOOK_HANDLE)
1168 !
1169 END SUBROUTINE WRITE_SURFL0
1170 !
1171 !     #############################################################
1172       SUBROUTINE WRITE_SURFL1(HPROGRAM,HREC,OFIELD,KRESP,HCOMMENT,HDIR)
1173 !     #############################################################
1174 !
1175 !!****  *WRITEL1* - routine to write a logical array
1176 !
1177 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
1178 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
1179 USE PARKIND1  ,ONLY : JPRB
1180 !
1181 #ifdef OL
1182 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFN_OL
1183 #endif
1184 #ifdef ASC
1185 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFN_ASC
1186 #endif
1187 #ifdef TXT
1188 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFN_TXT
1189 #endif
1190 #ifdef BIN
1191 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFN_BIN
1192 #endif
1193 #ifdef FA
1194 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFN_FA
1195 #endif
1196 #ifdef LFI
1197 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFN_LFI
1198 #endif
1199 #ifdef MNH
1200 USE MODI_WRITE_SURFL1_MNH
1201 #endif
1202 !
1203 USE MODI_TEST_RECORD_LEN
1204 !
1205 IMPLICIT NONE
1206 !
1207 !*      0.1   Declarations of arguments
1208 !
1209  CHARACTER(LEN=6),      INTENT(IN)  :: HPROGRAM ! calling program
1210  CHARACTER(LEN=*),      INTENT(IN)  :: HREC     ! name of the article to be written
1211 LOGICAL, DIMENSION(:), INTENT(IN)  :: OFIELD   ! array containing the data field
1212 INTEGER,               INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
1213  CHARACTER(LEN=100),    INTENT(IN)  :: HCOMMENT ! Comment string
1214  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR ! type of field :
1215 !                                             ! 'H' : field with
1216 !                                             !       horizontal spatial dim.
1217 !                                             ! '-' : no horizontal dim.
1218 !*      0.2   Declarations of local variables
1219 !
1220  CHARACTER(LEN=LEN_HREC)  :: YREC
1221 INTEGER            :: IL
1222  CHARACTER(LEN=1)   :: YDIR
1223 LOGICAL :: LNOWRITE
1224 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1225 !
1226 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL1',0,ZHOOK_HANDLE)
1227 !
1228 YREC = HREC
1229 YDIR = 'H'
1230 IF (PRESENT(HDIR)) YDIR = HDIR
1231 IL   = SIZE(OFIELD)
1232 !
1233  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
1234 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL1',1,ZHOOK_HANDLE)
1235 IF(LNOWRITE)RETURN
1236 !
1237 IF (HPROGRAM=='MESONH') THEN
1238 #ifdef MNH
1239   CALL WRITE_SURFL1_MNH(YREC,IL,OFIELD,KRESP,HCOMMENT,YDIR)
1240 #endif
1241 ENDIF
1242 !
1243 IF (HPROGRAM=='AROME ') THEN
1244 #ifdef ARO
1245   CALL WRITE_SURFL1_ARO(YREC,IL,OFIELD,KRESP,HCOMMENT,YDIR)
1246 #endif
1247 ENDIF
1248 !
1249 IF (HPROGRAM=='OFFLIN') THEN
1250 #ifdef OL
1251   CALL WRITE_SURFN_OL(YREC,OFIELD,KRESP,HCOMMENT,YDIR)
1252 #endif
1253 ENDIF
1254 !
1255 IF (HPROGRAM=='TEXTE ') THEN
1256 #ifdef TXT
1257   CALL WRITE_SURFN_TXT(YREC,OFIELD,KRESP,HCOMMENT,YDIR)
1258 #endif
1259 ENDIF
1260 !
1261 IF (HPROGRAM=='BINARY') THEN
1262 #ifdef BIN
1263   CALL WRITE_SURFN_BIN(YREC,OFIELD,KRESP,HCOMMENT,YDIR)
1264 #endif
1265 ENDIF
1266 !
1267 IF (HPROGRAM=='LFI   ') THEN
1268 #ifdef LFI
1269   CALL WRITE_SURFN_LFI(YREC,OFIELD,KRESP,HCOMMENT,YDIR)
1270 #endif
1271 ENDIF
1272 !
1273 IF (HPROGRAM=='ASCII ') THEN
1274 #ifdef ASC
1275   CALL WRITE_SURFN_ASC(YREC,OFIELD,KRESP,HCOMMENT,YDIR)
1276 #endif
1277 ENDIF
1278 !
1279 IF (HPROGRAM=='FA    ') THEN
1280 #ifdef FA
1281   CALL WRITE_SURFN_FA(YREC,IL,OFIELD,KRESP,HCOMMENT,YDIR)
1282 #endif
1283 ENDIF
1284 !
1285 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFL1',1,ZHOOK_HANDLE)
1286 !
1287 END SUBROUTINE WRITE_SURFL1
1288 !
1289 !     #############################################################
1290       SUBROUTINE WRITE_SURFT0(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
1291 !     #############################################################
1292 !
1293 !!****  *WRITET0* - routine to write a MESO-NH date_time scalar
1294 !
1295 USE MODD_TYPE_DATE_SURF
1296 !
1297 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
1298 !
1299 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
1300 USE PARKIND1  ,ONLY : JPRB
1301 !
1302 #ifdef OL
1303 USE MODE_WRITE_SURF_OL, ONLY: WRITE_SURFT_OL
1304 #endif
1305 #ifdef ASC
1306 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFT_ASC
1307 #endif
1308 #ifdef TXT
1309 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFT_TXT
1310 #endif
1311 #ifdef BIN
1312 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFT_BIN
1313 #endif
1314 #ifdef FA
1315 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFT_FA
1316 #endif
1317 #ifdef LFI
1318 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFT_LFI
1319 #endif
1320 #ifdef MNH
1321 USE MODI_WRITE_SURFT0_MNH
1322 #endif
1323 !
1324 USE MODI_TEST_RECORD_LEN
1325 !
1326 IMPLICIT NONE
1327 !
1328 #ifndef NOMPI
1329 INCLUDE "mpif.h"
1330 #endif
1331 !
1332 !*      0.1   Declarations of arguments
1333 !
1334  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
1335  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
1336 TYPE (DATE_TIME),   INTENT(IN)  :: TFIELD   ! array containing the data field
1337 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
1338  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
1339 !
1340 !*      0.2   Declarations of local variables
1341 !
1342  CHARACTER(LEN=LEN_HREC)  :: YREC
1343 REAL    :: ZTIME
1344 REAL   :: XTIME0
1345 INTEGER :: IDAY
1346 INTEGER :: IMONTH
1347 INTEGER :: IYEAR
1348 LOGICAL :: LNOWRITE
1349 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1350 !
1351 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT0',0,ZHOOK_HANDLE)
1352 !
1353 YREC = HREC
1354 !
1355 IYEAR  = TFIELD%TDATE%YEAR
1356 IMONTH = TFIELD%TDATE%MONTH
1357 IDAY   = TFIELD%TDATE%DAY
1358 ZTIME  = TFIELD%TIME
1359 !
1360  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
1361 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT0',1,ZHOOK_HANDLE)
1362 IF(LNOWRITE)RETURN
1363 !
1364 IF (HPROGRAM=='MESONH') THEN
1365 #ifdef MNH
1366   CALL WRITE_SURFT0_MNH(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1367 #endif
1368 ENDIF
1369 !
1370 IF (HPROGRAM=='AROME ') THEN
1371 #ifdef ARO
1372   CALL WRITE_SURFT0_ARO(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1373 #endif
1374 ENDIF
1375 !
1376 IF (NRANK==NPIO) THEN
1377   !
1378 #ifndef NOMPI
1379   XTIME0 = MPI_WTIME()
1380 #endif
1381   !
1382 !$OMP SINGLE
1383   !  
1384   IF (HPROGRAM=='ASCII ') THEN
1385 #ifdef ASC
1386     CALL WRITE_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1387 #endif
1388   ENDIF
1389   !
1390   IF (HPROGRAM=='FA    ') THEN
1391 #ifdef FA
1392     CALL WRITE_SURFT_FA(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1393 #endif
1394   ENDIF
1395   !
1396   IF (HPROGRAM=='OFFLIN') THEN
1397 #ifdef OL
1398     CALL WRITE_SURFT_OL(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1399 #endif
1400   ENDIF
1401   !
1402   IF (HPROGRAM=='TEXTE ') THEN
1403 #ifdef TXT
1404     CALL WRITE_SURFT_TXT(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1405 #endif
1406   ENDIF
1407   !
1408   IF (HPROGRAM=='BINARY') THEN
1409 #ifdef BIN
1410     CALL WRITE_SURFT_BIN(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1411 #endif
1412   ENDIF
1413   !
1414   IF (HPROGRAM=='LFI   ') THEN
1415 #ifdef LFI
1416     CALL WRITE_SURFT_LFI(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1417 #endif
1418   ENDIF
1419   !
1420 !$OMP END SINGLE 
1421   !
1422 #ifndef NOMPI
1423   XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
1424 #endif
1425   !
1426 ENDIF
1427 !
1428 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT0',1,ZHOOK_HANDLE)
1429 !
1430 END SUBROUTINE WRITE_SURFT0
1431 !
1432 !     #############################################################
1433       SUBROUTINE WRITE_SURFT1(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
1434 !     #############################################################
1435 !
1436 !!****  *READT2* - routine to read a MESO-NH date_time array
1437 !
1438 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
1439 USE MODD_TYPE_DATE_SURF
1440 !
1441 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
1442 USE PARKIND1  ,ONLY : JPRB
1443 !
1444 #ifdef ASC
1445 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFT_ASC
1446 #endif
1447 #ifdef LFI
1448 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFT_LFI
1449 #endif
1450 #ifdef MNH
1451 USE MODI_WRITE_SURFT1_MNH
1452 #endif
1453 !
1454 USE MODI_ABOR1_SFX
1455 USE MODI_TEST_RECORD_LEN
1456 !
1457 IMPLICIT NONE
1458 !
1459 !*      0.1   Declarations of arguments
1460 !
1461  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
1462  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
1463 TYPE (DATE_TIME), DIMENSION(:), INTENT(IN)  :: TFIELD   ! array containing the data field
1464 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
1465  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
1466 !
1467 !*      0.2   Declarations of local variables
1468 !
1469  CHARACTER(LEN=LEN_HREC)  :: YREC
1470 INTEGER :: IL1
1471 REAL ,   DIMENSION(SIZE(TFIELD,1)) :: ZTIME
1472 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IDAY
1473 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IMONTH
1474 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: IYEAR
1475 LOGICAL :: LNOWRITE
1476 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1477 !
1478 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT1',0,ZHOOK_HANDLE)
1479 !
1480 YREC = HREC
1481 IL1  = SIZE(TFIELD,1)
1482 !
1483 IYEAR (:) = TFIELD(:)%TDATE%YEAR
1484 IMONTH(:) = TFIELD(:)%TDATE%MONTH
1485 IDAY  (:) = TFIELD(:)%TDATE%DAY
1486 ZTIME (:) = TFIELD(:)%TIME
1487 !
1488  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
1489 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT1',1,ZHOOK_HANDLE)
1490 IF(LNOWRITE)RETURN
1491 !
1492 IF (HPROGRAM=='MESONH') THEN
1493    !G .TANGUY 03/2009
1494    !CALL ABOR1_SFX('WRITE_SURFT1: NOT AVAILABLE FOR MESONH')
1495 #ifdef MNH
1496    CALL WRITE_SURFT1_MNH(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1497 #endif
1498 ENDIF
1499 !
1500 IF (HPROGRAM=='AROME ') THEN
1501 #ifdef ARO
1502   CALL WRITE_SURFT1_ARO(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1503 #endif
1504 ENDIF
1505 !
1506 !IF (HPROGRAM=='OFFLIN') THEN
1507 !  CALL ABOR1_SFX('WRITE_SURFT1: NOT AVAILABLE FOR OFFLIN')
1508 !ENDIF
1509 !
1510 !plm IF (HPROGRAM=='TEXTE ') THEN
1511 !plm   CALL WRITE_SURFT1_TXT(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1512 !plm ENDIF
1513 !
1514 IF (HPROGRAM=='LFI   ') THEN
1515 #ifdef LFI
1516   CALL WRITE_SURFT_LFI(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1517 #endif        
1518 ENDIF
1519 !
1520 IF (HPROGRAM=='ASCII ') THEN
1521 #ifdef ASC
1522   CALL WRITE_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1523 #endif
1524 ENDIF
1525 !
1526 IF (HPROGRAM=='FA    ') THEN
1527   CALL ABOR1_SFX('WRITE_SURFT1: NOT AVAILABLE FOR FA')
1528 ENDIF
1529 !
1530 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT1',1,ZHOOK_HANDLE)
1531 !
1532 END SUBROUTINE WRITE_SURFT1
1533 !
1534 !     #############################################################
1535       SUBROUTINE WRITE_SURFT2(HPROGRAM,HREC,TFIELD,KRESP,HCOMMENT)
1536 !     #############################################################
1537 !
1538 !!****  *WRITET2* - routine to write a MESO-NH date_time array
1539 !
1540 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI
1541 USE MODD_TYPE_DATE_SURF
1542 !
1543 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
1544 USE PARKIND1  ,ONLY : JPRB
1545 !
1546 #ifdef ASC
1547 USE MODE_WRITE_SURF_ASC, ONLY: WRITE_SURFT_ASC
1548 #endif
1549 #ifdef TXT
1550 USE MODE_WRITE_SURF_TXT, ONLY: WRITE_SURFT_TXT
1551 #endif
1552 #ifdef BIN
1553 USE MODE_WRITE_SURF_BIN, ONLY: WRITE_SURFT_BIN
1554 #endif
1555 #ifdef FA
1556 USE MODE_WRITE_SURF_FA, ONLY: WRITE_SURFT_FA
1557 #endif
1558 #ifdef LFI
1559 USE MODE_WRITE_SURF_LFI, ONLY: WRITE_SURFT_LFI
1560 #endif
1561 !
1562 USE MODI_ABOR1_SFX
1563 USE MODI_TEST_RECORD_LEN
1564 !
1565 IMPLICIT NONE
1566 !
1567 !*      0.1   Declarations of arguments
1568 !
1569  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM ! calling program
1570  CHARACTER(LEN=*),   INTENT(IN)  :: HREC     ! name of the article to be written
1571 TYPE (DATE_TIME), DIMENSION(:,:), INTENT(IN)  :: TFIELD   ! array containing the data field
1572 INTEGER,            INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
1573  CHARACTER(LEN=100), INTENT(IN)  :: HCOMMENT ! Comment string
1574 !
1575 !*      0.2   Declarations of local variables
1576 !
1577  CHARACTER(LEN=LEN_HREC)  :: YREC
1578 INTEGER :: IL1, IL2
1579 REAL ,   DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: ZTIME
1580 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IDAY
1581 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IMONTH
1582 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: IYEAR
1583 LOGICAL :: LNOWRITE
1584 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1585 !
1586 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT2',0,ZHOOK_HANDLE)
1587 !
1588 YREC = HREC
1589 IL1  = SIZE(TFIELD,1)
1590 IL2  = SIZE(TFIELD,2)
1591 !
1592 IYEAR (:,:) = TFIELD(:,:)%TDATE%YEAR
1593 IMONTH(:,:) = TFIELD(:,:)%TDATE%MONTH
1594 IDAY  (:,:) = TFIELD(:,:)%TDATE%DAY
1595 ZTIME (:,:) = TFIELD(:,:)%TIME
1596 !
1597  CALL TEST_RECORD_LEN(HPROGRAM,YREC,LNOWRITE)
1598 IF(LNOWRITE .AND. LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT2',1,ZHOOK_HANDLE)
1599 IF(LNOWRITE)RETURN
1600 !
1601 IF (HPROGRAM=='MESONH') THEN
1602   CALL ABOR1_SFX('WRITE_SURFT2: NOT AVAILABLE FOR MESONH')
1603 ENDIF
1604 !
1605 IF (HPROGRAM=='AROME ') THEN
1606   CALL ABOR1_SFX('WRITE_SURFT2: NOT AVAILABLE FOR AROME')
1607 ENDIF
1608 !
1609 !IF (HPROGRAM=='OFFLIN') THEN
1610 !  CALL ABOR1_SFX('WRITE_SURFT2: NOT AVAILABLE FOR OFFLIN')
1611 !ENDIF
1612 !
1613 IF (HPROGRAM=='LFI   ') THEN
1614 #ifdef LFI
1615   CALL WRITE_SURFT_LFI(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1616 #endif        
1617 ENDIF
1618 !
1619 IF (HPROGRAM=='TEXTE ') THEN
1620 #ifdef TXT
1621   CALL WRITE_SURFT_TXT(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1622 #endif
1623 ENDIF
1624 !
1625 IF (HPROGRAM=='BINARY') THEN
1626 #ifdef BIN
1627   CALL WRITE_SURFT_BIN(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1628 #endif
1629 ENDIF
1630 !
1631 IF (HPROGRAM=='ASCII ') THEN
1632 #ifdef ASC
1633   CALL WRITE_SURFT_ASC(YREC,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1634 #endif
1635 ENDIF
1636 !
1637 IF (HPROGRAM=='FA    ') THEN
1638 #ifdef FA
1639   CALL WRITE_SURFT_FA(YREC,IL1,IL2,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1640 #endif
1641 ENDIF
1642 !
1643 IF (LHOOK) CALL DR_HOOK('MODI_WRITE_SURF:WRITE_SURFT2',1,ZHOOK_HANDLE)
1644 !
1645 END SUBROUTINE WRITE_SURFT2