SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
write_surf.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !##################
7 !##################
8 !
9 !----------------------------------------------------
10 !! MODIFICATIONS
11 !! -------------
12 !! Original
13 !! J.Escobar 10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
14 !----------------------------------------------------
15 !
16  INTERFACE write_surf
17 !
18  SUBROUTINE write_surfx0 (DGU, U, &
19  hprogram,hrec,pfield,kresp,hcomment)
20 !
22 USE modd_surf_atm_n, ONLY : surf_atm_t
23 !
24 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
25 TYPE(surf_atm_t), INTENT(INOUT) :: u
26 !
27  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
28  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
29 REAL, INTENT(IN) :: pfield ! real scalar to be written
30 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
31  CHARACTER(LEN=100),INTENT(IN) :: hcomment ! Comment string
32 !
33 END SUBROUTINE write_surfx0
34 !
35  SUBROUTINE write_surfx1 (DGU, U, &
36  hprogram,hrec,pfield,kresp,hcomment,hdir,hnam_dim)
37 !
39 USE modd_surf_atm_n, ONLY : surf_atm_t
40 !
41 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
42 TYPE(surf_atm_t), INTENT(INOUT) :: u
43 !
44  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
45  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
46 REAL, DIMENSION(:), INTENT(IN) :: pfield ! array containing the data field
47 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
48  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
49  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
50 ! ! 'H' : field with
51 ! ! horizontal spatial dim.
52 ! ! '-' : no horizontal dim.
53  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
54 END SUBROUTINE write_surfx1
55 !
56  SUBROUTINE write_surfx2 (DGU, U, &
57  hprogram,hrec,pfield,kresp,hcomment,hdir,hnam_dim)
58 !
60 USE modd_surf_atm_n, ONLY : surf_atm_t
61 !
62 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
63 TYPE(surf_atm_t), INTENT(INOUT) :: u
64 !
65  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
66  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
67 REAL, DIMENSION(:,:), INTENT(IN) :: pfield ! array containing the data field
68 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
69  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
70  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
71 ! ! 'H' : field with
72 ! ! horizontal spatial dim.
73 ! ! '-' : no horizontal dim.
74  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
75 END SUBROUTINE write_surfx2
76 !
77 !RJ: interface to WRITE_SURFX2COV moved out
78 !
79  SUBROUTINE write_surfn0 (DGU, U, &
80  hprogram,hrec,kfield,kresp,hcomment)
81 !
83 USE modd_surf_atm_n, ONLY : surf_atm_t
84 !
85 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
86 TYPE(surf_atm_t), INTENT(INOUT) :: u
87 !
88  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
89  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
90 INTEGER, INTENT(IN) :: kfield ! integer to be written
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_surfn0
95 !
96  SUBROUTINE write_surfn1 (DGU, U, &
97  hprogram,hrec,kfield,kresp,hcomment,hdir,hnam_dim)
98 !
100 USE modd_surf_atm_n, ONLY : surf_atm_t
101 !
102 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
103 TYPE(surf_atm_t), INTENT(INOUT) :: u
104 !
105  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
106  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
107 INTEGER, DIMENSION(:), INTENT(IN) :: kfield ! integer to be written
108 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
109  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
110  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
111 ! ! 'H' : field with
112 ! ! horizontal spatial dim.
113 ! ! '-' : no horizontal dim.
114  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
115 END SUBROUTINE write_surfn1
116 !
117  SUBROUTINE write_surfc0 (DGU, U, &
118  hprogram,hrec,hfield,kresp,hcomment)
119 !
121 USE modd_surf_atm_n, ONLY : surf_atm_t
122 !
123 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
124 TYPE(surf_atm_t), INTENT(INOUT) :: u
125 !
126  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
127  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
128  CHARACTER(LEN=*), INTENT(IN) :: hfield ! caracter to be written
129 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
130  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
131 !
132 END SUBROUTINE write_surfc0
133 !
134  SUBROUTINE write_surfl0 (DGU, U, &
135  hprogram,hrec,ofield,kresp,hcomment)
136 !
138 USE modd_surf_atm_n, ONLY : surf_atm_t
139 !
140 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
141 TYPE(surf_atm_t), INTENT(INOUT) :: u
142 !
143  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
144  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
145 LOGICAL, INTENT(IN) :: ofield ! array containing the data field
146 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
147  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
148 !
149 END SUBROUTINE write_surfl0
150 !
151  SUBROUTINE write_surfl1 (DGU, U, &
152  hprogram,hrec,ofield,kresp,hcomment,hdir)
153 !
155 USE modd_surf_atm_n, ONLY : surf_atm_t
156 !
157 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
158 TYPE(surf_atm_t), INTENT(INOUT) :: u
159 !
160  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
161  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
162 LOGICAL, DIMENSION(:), INTENT(IN) :: ofield ! array containing the data field
163 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
164  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
165  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
166 ! ! 'H' : field with
167 ! ! horizontal spatial dim.
168 ! ! '-' : no horizontal dim.
169 END SUBROUTINE write_surfl1
170 !
171  SUBROUTINE write_surft0 (DGU, U, &
172  hprogram,hrec,tfield,kresp,hcomment)
173 !
175 !
177 USE modd_surf_atm_n, ONLY : surf_atm_t
178 !
179 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
180 TYPE(surf_atm_t), INTENT(INOUT) :: u
181 !
182  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
183  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
184 TYPE (date_time), INTENT(IN) :: tfield ! array containing the data field
185 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
186  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
187 !
188 END SUBROUTINE write_surft0
189 !
190  SUBROUTINE write_surft1 (DGU, U, &
191  hprogram,hrec,tfield,kresp,hcomment)
192 !
194 !
196 USE modd_surf_atm_n, ONLY : surf_atm_t
197 !
198 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
199 TYPE(surf_atm_t), INTENT(INOUT) :: u
200 !
201  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
202  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
203 TYPE (date_time), DIMENSION(:), INTENT(IN) :: tfield ! array containing the data field
204 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
205  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
206 !
207 END SUBROUTINE write_surft1
208 !
209  SUBROUTINE write_surft2 (DGU, U, &
210  hprogram,hrec,tfield,kresp,hcomment)
211 !
213 !
215 USE modd_surf_atm_n, ONLY : surf_atm_t
216 !
217 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
218 TYPE(surf_atm_t), INTENT(INOUT) :: u
219 !
220  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
221  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
222 TYPE (date_time), DIMENSION(:,:), INTENT(IN) :: tfield ! array containing the data field
223 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
224  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
225 !
226 END SUBROUTINE write_surft2
227 !
228 END INTERFACE
229 !
230 END MODULE modi_write_surf
231 !
232 ! #############################################################
233  SUBROUTINE write_surfx0 (DGU, U, &
234  hprogram,hrec,pfield,kresp,hcomment)
235 ! #############################################################
236 !
237 !!**** *WRITEX0* - routine to write a real scalar
238 !
239 !
240 !
241 !
242 !
244 USE modd_surf_atm_n, ONLY : surf_atm_t
245 !
246 USE yomhook ,ONLY : lhook, dr_hook
247 USE parkind1 ,ONLY : jprb
248 !
249 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
250 !
251 #ifdef SFX_OL
253 #endif
254 #ifdef SFX_LFI
256 #endif
257 #ifdef SFX_NC
259 #endif
260 #ifdef SFX_TXT
262 #endif
263 #ifdef SFX_BIN
265 #endif
266 #ifdef SFX_ASC
268 #endif
269 #ifdef SFX_FA
271 #endif
272 #ifdef SFX_MNH
273 USE modi_write_surfx0_mnh
274 #endif
275 !
276 USE modi_test_record_len
277 !
278 IMPLICIT NONE
279 !
280 #ifdef SFX_MPI
281 include "mpif.h"
282 #endif
283 !
284 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
285 TYPE(surf_atm_t), INTENT(INOUT) :: u
286 !
287 !
288 !* 0.1 Declarations of arguments
289 !
290  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
291  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
292 REAL, INTENT(IN) :: pfield ! real scalar to be written
293 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
294  CHARACTER(LEN=100),INTENT(IN) :: hcomment ! Comment string
295 !
296 !* 0.2 Declarations of local variables
297 !
298  CHARACTER(LEN=12) :: yrec
299 LOGICAL :: lnowrite
300 REAL :: xtime0
301 REAL(KIND=JPRB) :: zhook_handle
302 !
303 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX0',0,zhook_handle)
304 !
305 yrec = hrec
306 !
307  CALL test_record_len(dgu, &
308  hprogram,yrec,lnowrite)
309 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX0',1,zhook_handle)
310 IF(lnowrite)RETURN
311 !
312 IF (hprogram=='MESONH') THEN
313 #ifdef SFX_MNH
314  CALL write_surfx0_mnh(yrec,pfield,kresp,hcomment)
315 #endif
316 ENDIF
317 !
318 IF (hprogram=='AROME ') THEN
319 #ifdef SFX_ARO
320  CALL write_surfx0_aro(yrec,pfield,kresp,hcomment)
321 #endif
322 ENDIF
323 !
324 IF (nrank==npio) THEN
325  !
326 #ifdef SFX_MPI
327  xtime0 = mpi_wtime()
328 #endif
329  !
330 !$OMP SINGLE
331  !
332  IF (hprogram=='ASCII ') THEN
333 #ifdef SFX_ASC
334  CALL write_surf0_asc(&
335  yrec,pfield,kresp,hcomment)
336 #endif
337  ENDIF
338  !
339  IF (hprogram=='FA ') THEN
340 #ifdef SFX_FA
341  CALL write_surf0_fa(&
342  yrec,pfield,kresp,hcomment)
343 #endif
344  ENDIF
345  !
346  IF (hprogram=='OFFLIN') THEN
347 #ifdef SFX_OL
348  IF (yrec=='time') THEN
349  CALL write_surf0_time_ol(pfield,kresp,hcomment)
350  ELSE
351  CALL write_surf0_ol(yrec,pfield,kresp,hcomment)
352  ENDIF
353 #endif
354  ENDIF
355  !
356  IF (hprogram=='TEXTE ') THEN
357 #ifdef SFX_TXT
358  CALL write_surf0_txt(yrec,pfield,kresp,hcomment)
359 #endif
360  ENDIF
361  !
362  IF (hprogram=='BINARY') THEN
363 #ifdef SFX_BIN
364  CALL write_surf0_bin(yrec,pfield,kresp,hcomment)
365 #endif
366  ENDIF
367  !
368  IF (hprogram=='LFI ') THEN
369 #ifdef SFX_LFI
370  CALL write_surf0_lfi(&
371  yrec,pfield,kresp,hcomment)
372 #endif
373  ENDIF
374  !
375  IF (hprogram=='NC ') THEN
376 #ifdef SFX_NC
377  CALL write_surf0_nc(dgu, &
378  yrec,pfield,kresp,hcomment)
379 #endif
380  ENDIF
381  !
382 !$OMP END SINGLE
383  !
384 #ifdef SFX_MPI
385  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
386 #endif
387  !
388 ENDIF
389 !
390 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX0',1,zhook_handle)
391 !
392 END SUBROUTINE write_surfx0
393 !
394 ! #############################################################
395  SUBROUTINE write_surfx1 (DGU, U, &
396  hprogram,hrec,pfield,kresp,hcomment,hdir,hnam_dim)
397 ! #############################################################
398 !
399 !!**** *WRITEX1* - routine to fill a real 1D array for the externalised surface
400 !
401 !
402 !
403 !
404 !
406 USE modd_surf_atm_n, ONLY : surf_atm_t
407 !
408 USE modd_surfex_mpi, ONLY : wlog_mpi
409 USE yomhook ,ONLY : lhook, dr_hook
410 USE parkind1 ,ONLY : jprb
411 !
412 #ifdef SFX_OL
414 #endif
415 #ifdef SFX_ASC
417 #endif
418 #ifdef SFX_TXT
420 #endif
421 #ifdef SFX_BIN
423 #endif
424 #ifdef SFX_FA
426 #endif
427 #ifdef SFX_LFI
429 #endif
430 #ifdef SFX_NC
432 #endif
433 #ifdef SFX_MNH
434 USE modi_write_surfx1_mnh
435 #endif
436 !
437 USE modi_test_record_len
438 !
439 IMPLICIT NONE
440 !
441 !* 0.1 Declarations of arguments
442 !
443  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
444 !
445 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
446 TYPE(surf_atm_t), INTENT(INOUT) :: u
447 !
448  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
449 REAL, DIMENSION(:), INTENT(IN) :: pfield ! array containing the data field
450 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
451  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
452  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
453 ! ! 'H' : field with
454 ! ! horizontal spatial dim.
455 ! ! '-' : no horizontal dim.
456  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
457 !* 0.2 Declarations of local variables
458 !
459  CHARACTER(LEN=12) :: yrec
460 INTEGER :: il
461  CHARACTER(LEN=1) :: ydir
462 LOGICAL :: lnowrite
463 REAL(KIND=JPRB) :: zhook_handle
464 !
465 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX1',0,zhook_handle)
466 !
467 yrec = hrec
468 ydir = 'H'
469 IF (present(hdir)) ydir = hdir
470 il = SIZE(pfield)
471 !
472  CALL test_record_len(dgu, &
473  hprogram,yrec,lnowrite)
474 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX1',1,zhook_handle)
475 IF(lnowrite)RETURN
476 !
477 IF (hprogram=='MESONH') THEN
478 #ifdef SFX_MNH
479  CALL write_surfx1_mnh(yrec,il,pfield,kresp,hcomment,ydir)
480 #endif
481 ENDIF
482 !
483 IF (hprogram=='AROME ') THEN
484 #ifdef SFX_ARO
485  CALL write_surfx1_aro(yrec,il,pfield,kresp,hcomment,ydir)
486 #endif
487 ENDIF
488 !
489 IF (hprogram=='OFFLIN') THEN
490 #ifdef SFX_OL
491  CALL write_surfx1n1_ol(&
492  yrec,pfield,kresp,hcomment,ydir)
493 #endif
494 ENDIF
495 !
496 IF (hprogram=='TEXTE ') THEN
497 #ifdef SFX_TXT
498  CALL write_surfx_txt(dgu, &
499  yrec,pfield,kresp,hcomment,ydir)
500 #endif
501 ENDIF
502 !
503 IF (hprogram=='BINARY') THEN
504 #ifdef SFX_BIN
505  CALL write_surfx_bin(dgu, u, &
506  yrec,pfield,kresp,hcomment,ydir)
507 #endif
508 ENDIF
509 !
510 IF (hprogram=='LFI ') THEN
511 #ifdef SFX_LFI
512  CALL write_surfn_lfi(&
513  yrec,pfield,kresp,hcomment,ydir)
514 #endif
515 ENDIF
516 !
517 IF (hprogram=='NC ') THEN
518 #ifdef SFX_NC
519  IF (present(hnam_dim)) THEN
520  CALL write_surfn_nc(dgu, &
521  yrec,pfield,kresp,hcomment,ydir,hnam_dim)
522  ELSE
523  CALL write_surfn_nc(dgu, &
524  yrec,pfield,kresp,hcomment,ydir)
525  ENDIF
526 #endif
527 ENDIF
528 !
529 IF (hprogram=='ASCII ') THEN
530 #ifdef SFX_ASC
531  CALL write_surfn_asc(&
532  yrec,pfield,kresp,hcomment,ydir)
533 #endif
534 ENDIF
535 !
536 IF (hprogram=='FA ') THEN
537 #ifdef SFX_FA
538  CALL write_surfn_fa(&
539  yrec,il,pfield,kresp,hcomment,ydir)
540 #endif
541 ENDIF
542 !
543 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX1',1,zhook_handle)
544 !
545 END SUBROUTINE write_surfx1
546 !
547 ! #############################################################
548  SUBROUTINE write_surfx2 (DGU, U, &
549  hprogram,hrec,pfield,kresp,hcomment,hdir,hnam_dim)
550 ! #############################################################
551 !
552 !!**** *WRITEX2* - routine to fill a real 2D array for the externalised surface
553 !
554 !
555 !
556 !
557 !
559 USE modd_surf_atm_n, ONLY : surf_atm_t
560 !
561 USE modd_surfex_mpi, ONLY : wlog_mpi
562 USE yomhook ,ONLY : lhook, dr_hook
563 USE parkind1 ,ONLY : jprb
564 !
565 #ifdef SFX_OL
567 #endif
568 #ifdef SFX_TXT
570 #endif
571 #ifdef SFX_BIN
573 #endif
574 #ifdef SFX_LFI
576 #endif
577 #ifdef SFX_NC
579 #endif
580 #ifdef SFX_ASC
582 #endif
583 #ifdef SFX_FA
585 #endif
586 #ifdef SFX_MNH
587 USE modi_write_surfx2_mnh
588 #endif
589 !
590 USE modi_test_record_len
591 !
592 IMPLICIT NONE
593 !
594 !* 0.1 Declarations of arguments
595 !
596  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
597 !
598 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
599 TYPE(surf_atm_t), INTENT(INOUT) :: u
600 !
601  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
602 REAL, DIMENSION(:,:), INTENT(IN) :: pfield ! array containing the data field
603 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
604  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
605  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
606 ! ! 'H' : field with
607 ! ! horizontal spatial dim.
608 ! ! '-' : no horizontal dim.
609  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
610 !* 0.2 Declarations of local variables
611 !
612  CHARACTER(LEN=12) :: yrec
613 INTEGER :: il1
614 INTEGER :: il2
615  CHARACTER(LEN=1) :: ydir
616 LOGICAL :: lnowrite
617 REAL(KIND=JPRB) :: zhook_handle
618 !
619 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX2',0,zhook_handle)
620 !
621 yrec = hrec
622 ydir = 'H'
623 IF (present(hdir)) ydir = hdir
624 il1 = SIZE(pfield,1)
625 il2 = SIZE(pfield,2)
626 !
627  CALL test_record_len(dgu, &
628  hprogram,yrec,lnowrite)
629 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX2',1,zhook_handle)
630 IF(lnowrite)RETURN
631 !
632 IF (hprogram=='MESONH') THEN
633 #ifdef SFX_MNH
634  CALL write_surfx2_mnh(yrec,il1,il2,pfield,kresp,hcomment,ydir)
635 #endif
636 ENDIF
637 !
638 IF (hprogram=='AROME ') THEN
639 #ifdef SFX_ARO
640  CALL write_surfx2_aro(yrec,il1,il2,pfield,kresp,hcomment,ydir)
641 #endif
642 ENDIF
643 !
644 IF (hprogram=='OFFLIN') THEN
645 #ifdef SFX_OL
646  CALL write_surfl1x2_ol(yrec,pfield,kresp,hcomment,ydir)
647 #endif
648 ENDIF
649 !
650 IF (hprogram=='TEXTE ') THEN
651 #ifdef SFX_TXT
652  CALL write_surfx_txt(dgu, &
653  yrec,pfield,kresp,hcomment,ydir)
654 #endif
655 ENDIF
656 !
657 IF (hprogram=='BINARY') THEN
658 #ifdef SFX_BIN
659  CALL write_surfx_bin(dgu, u, &
660  yrec,pfield,kresp,hcomment,ydir)
661 #endif
662 ENDIF
663 !
664 IF (hprogram=='LFI ') THEN
665 #ifdef SFX_LFI
666  CALL write_surfn_lfi(&
667  yrec,pfield,kresp,hcomment,ydir)
668 #endif
669 ENDIF
670 !
671 IF (hprogram=='NC ') THEN
672 #ifdef SFX_NC
673  IF (present(hnam_dim)) THEN
674  CALL write_surfn_nc(dgu, &
675  yrec,pfield,kresp,hcomment,ydir,hnam_dim)
676  ELSE
677  CALL write_surfn_nc(dgu, &
678  yrec,pfield,kresp,hcomment,ydir)
679  ENDIF
680 #endif
681 ENDIF
682 !
683 IF (hprogram=='ASCII ') THEN
684 #ifdef SFX_ASC
685  CALL write_surfn_asc(&
686  yrec,pfield,kresp,hcomment,ydir)
687 #endif
688 ENDIF
689 !
690 IF (hprogram=='FA ') THEN
691 #ifdef SFX_FA
692  CALL write_surfn_fa(&
693  yrec,il1,il2,pfield,kresp,hcomment,ydir)
694 #endif
695 ENDIF
696 !
697 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFX2',1,zhook_handle)
698 !
699 END SUBROUTINE write_surfx2
700 !
701 ! #############################################################
702  SUBROUTINE write_surfn0 (DGU, U, &
703  hprogram,hrec,kfield,kresp,hcomment)
704 ! #############################################################
705 !
706 !!**** *WRITEN0* - routine to write an integer
707 !
708 !
709 !
710 !
711 !
713 USE modd_surf_atm_n, ONLY : surf_atm_t
714 !
715 USE yomhook ,ONLY : lhook, dr_hook
716 USE parkind1 ,ONLY : jprb
717 !
718 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
719 !
720 #ifdef SFX_OL
722 #endif
723 #ifdef SFX_ASC
725 #endif
726 #ifdef SFX_TXT
728 #endif
729 #ifdef SFX_BIN
731 #endif
732 #ifdef SFX_FA
734 #endif
735 #ifdef SFX_LFI
737 #endif
738 #ifdef SFX_NC
740 #endif
741 #ifdef SFX_MNH
742 USE modi_write_surfn0_mnh
743 #endif
744 !
745 USE modi_test_record_len
746 !
747 IMPLICIT NONE
748 !
749 #ifdef SFX_MPI
750 include "mpif.h"
751 #endif
752 !
753 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
754 TYPE(surf_atm_t), INTENT(INOUT) :: u
755 !
756 !
757 !* 0.1 Declarations of arguments
758 !
759  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
760  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
761 INTEGER, INTENT(IN) :: kfield ! integer to be written
762 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
763  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
764 !
765 !* 0.2 Declarations of local variables
766 !
767  CHARACTER(LEN=12) :: yrec
768 LOGICAL :: lnowrite
769 REAL :: xtime0
770 REAL(KIND=JPRB) :: zhook_handle
771 !
772 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN0',0,zhook_handle)
773 !
774 yrec = hrec
775 !
776  CALL test_record_len(dgu, &
777  hprogram,yrec,lnowrite)
778 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN0',1,zhook_handle)
779 IF(lnowrite)RETURN
780 
781 !
782 IF (hprogram=='MESONH') THEN
783 #ifdef SFX_MNH
784  CALL write_surfn0_mnh(yrec,kfield,kresp,hcomment)
785 #endif
786 ENDIF
787 !
788 IF (hprogram=='AROME ') THEN
789 #ifdef SFX_ARO
790  CALL write_surfn0_aro(yrec,kfield,kresp,hcomment)
791 #endif
792 ENDIF
793 !
794 IF (nrank==npio) THEN
795  !
796 #ifdef SFX_MPI
797  xtime0 = mpi_wtime()
798 #endif
799  !
800 !$OMP SINGLE
801 !
802  IF (hprogram=='ASCII ') THEN
803 #ifdef SFX_ASC
804  CALL write_surf0_asc(&
805  yrec,kfield,kresp,hcomment)
806 #endif
807  ENDIF
808  !
809  IF (hprogram=='FA ') THEN
810 #ifdef SFX_FA
811  CALL write_surf0_fa(&
812  yrec,kfield,kresp,hcomment)
813 #endif
814  ENDIF
815  !
816  IF (hprogram=='OFFLIN') THEN
817 #ifdef SFX_OL
818  CALL write_surf0_ol(yrec,kfield,kresp,hcomment)
819 #endif
820  ENDIF
821  !
822  IF (hprogram=='TEXTE ') THEN
823 #ifdef SFX_TXT
824  CALL write_surf0_txt(yrec,kfield,kresp,hcomment)
825 #endif
826  ENDIF
827  !
828  IF (hprogram=='BINARY') THEN
829 #ifdef SFX_BIN
830  CALL write_surf0_bin(yrec,kfield,kresp,hcomment)
831 #endif
832  ENDIF
833  !
834  IF (hprogram=='LFI ') THEN
835 #ifdef SFX_LFI
836  CALL write_surf0_lfi(&
837  yrec,kfield,kresp,hcomment)
838 #endif
839  ENDIF
840  !
841  IF (hprogram=='NC ') THEN
842 #ifdef SFX_NC
843  CALL write_surf0_nc(dgu, &
844  yrec,kfield,kresp,hcomment)
845 #endif
846  ENDIF
847  !
848 !$OMP END SINGLE
849  !
850 #ifdef SFX_MPI
851  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
852 #endif
853  !
854 ENDIF
855 !
856 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN0',1,zhook_handle)
857 !
858 END SUBROUTINE write_surfn0
859 
860 ! #############################################################
861  SUBROUTINE write_surfn1 (DGU, U, &
862  hprogram,hrec,kfield,kresp,hcomment,hdir,hnam_dim)
863 ! #############################################################
864 !
865 !!**** *WRITEN0* - routine to write an integer
866 !
867 !
868 !
869 !
870 !
872 USE modd_surf_atm_n, ONLY : surf_atm_t
873 !
874 USE modd_surfex_mpi, ONLY : wlog_mpi
875 USE yomhook ,ONLY : lhook, dr_hook
876 USE parkind1 ,ONLY : jprb
877 !
878 #ifdef SFX_OL
880 #endif
881 #ifdef SFX_ASC
883 #endif
884 #ifdef SFX_TXT
886 #endif
887 #ifdef SFX_BIN
889 #endif
890 #ifdef SFX_FA
892 #endif
893 #ifdef SFX_LFI
895 #endif
896 #ifdef SFX_NC
898 #endif
899 #ifdef SFX_MNH
900 USE modi_write_surfn1_mnh
901 #endif
902 !
903 USE modi_test_record_len
904 !
905 IMPLICIT NONE
906 !
907 !* 0.1 Declarations of arguments
908 !
909  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
910 !
911 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
912 TYPE(surf_atm_t), INTENT(INOUT) :: u
913 !
914  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
915 INTEGER, DIMENSION(:), INTENT(IN) :: kfield ! integer to be written
916 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
917  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
918  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
919 ! ! 'H' : field with
920 ! ! horizontal spatial dim.
921 ! ! '-' : no horizontal dim.
922  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: hnam_dim
923 !* 0.2 Declarations of local variables
924 !
925  CHARACTER(LEN=12) :: yrec
926 INTEGER :: il
927  CHARACTER(LEN=1) :: ydir
928 LOGICAL :: lnowrite
929 REAL(KIND=JPRB) :: zhook_handle
930 !
931 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN1',0,zhook_handle)
932 !
933 yrec = hrec
934 ydir = 'H'
935 IF (present(hdir)) ydir = hdir
936 il = SIZE(kfield)
937 !
938  CALL test_record_len(dgu, &
939  hprogram,yrec,lnowrite)
940 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN1',1,zhook_handle)
941 IF(lnowrite)RETURN
942 !
943 IF (hprogram=='MESONH') THEN
944 #ifdef SFX_MNH
945  CALL write_surfn1_mnh(yrec,il,kfield,kresp,hcomment,ydir)
946 #endif
947 ENDIF
948 !
949 IF (hprogram=='AROME ') THEN
950 #ifdef SFX_ARO
951  CALL write_surfn1_aro(yrec,il,kfield,kresp,hcomment,ydir)
952 #endif
953 ENDIF
954 !
955 IF (hprogram=='OFFLIN') THEN
956 #ifdef SFX_OL
957  CALL write_surfx1n1_ol(&
958  yrec,kfield,kresp,hcomment,ydir)
959 #endif
960 ENDIF
961 !
962 IF (hprogram=='TEXTE ') THEN
963 #ifdef SFX_TXT
964  CALL write_surfn_txt(yrec,kfield,kresp,hcomment,ydir)
965 #endif
966 ENDIF
967 !
968 IF (hprogram=='BINARY') THEN
969 #ifdef SFX_BIN
970  CALL write_surfn_bin(yrec,kfield,kresp,hcomment,ydir)
971 #endif
972 ENDIF
973 !
974 IF (hprogram=='LFI ') THEN
975 #ifdef SFX_LFI
976  CALL write_surfn_lfi(&
977  yrec,kfield,kresp,hcomment,ydir)
978 #endif
979 ENDIF
980 !
981 IF (hprogram=='NC ') THEN
982 #ifdef SFX_NC
983  IF (present(hnam_dim)) THEN
984  CALL write_surfn_nc(dgu, &
985  yrec,kfield,kresp,hcomment,ydir,hnam_dim)
986  ELSE
987  CALL write_surfn_nc(dgu, &
988  yrec,kfield,kresp,hcomment,ydir)
989  ENDIF
990 #endif
991 ENDIF
992 !
993 IF (hprogram=='ASCII ') THEN
994 #ifdef SFX_ASC
995  CALL write_surfn_asc(&
996  yrec,kfield,kresp,hcomment,ydir)
997 #endif
998 ENDIF
999 !
1000 IF (hprogram=='FA ') THEN
1001 #ifdef SFX_FA
1002  CALL write_surfn_fa(&
1003  yrec,il,kfield,kresp,hcomment,ydir)
1004 #endif
1005 ENDIF
1006 !
1007 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFN1',1,zhook_handle)
1008 !
1009 END SUBROUTINE write_surfn1
1010 !
1011 ! #############################################################
1012  SUBROUTINE write_surfc0 (DGU, U, &
1013  hprogram,hrec,hfield,kresp,hcomment)
1014 ! #############################################################
1015 !
1016 !!**** *WRITEC0* - routine to write an integer
1017 !
1018 !
1019 !
1020 !
1021 !
1023 USE modd_surf_atm_n, ONLY : surf_atm_t
1024 !
1025 USE yomhook ,ONLY : lhook, dr_hook
1026 USE parkind1 ,ONLY : jprb
1027 !
1028 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
1029 !
1030 #ifdef SFX_OL
1032 #endif
1033 #ifdef SFX_ASC
1035 #endif
1036 #ifdef SFX_TXT
1038 #endif
1039 #ifdef SFX_BIN
1041 #endif
1042 #ifdef SFX_FA
1044 #endif
1045 #ifdef SFX_LFI
1047 #endif
1048 #ifdef SFX_NC
1050 #endif
1051 #ifdef SFX_MNH
1052 USE modi_write_surfc0_mnh
1053 #endif
1054 !
1055 USE modi_test_record_len
1056 !
1057 IMPLICIT NONE
1058 !
1059 #ifdef SFX_MPI
1060 include "mpif.h"
1061 #endif
1062 !
1063 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1064 TYPE(surf_atm_t), INTENT(INOUT) :: u
1065 !
1066 !
1067 !* 0.1 Declarations of arguments
1068 !
1069  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1070  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1071  CHARACTER(LEN=*), INTENT(IN) :: hfield ! caracter to be written
1072 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1073  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1074 !
1075 !* 0.2 Declarations of local variables
1076 !
1077  CHARACTER(LEN=12) :: yrec
1078  CHARACTER(LEN=40) :: yfield
1079 LOGICAL :: lnowrite
1080 REAL :: xtime0
1081 REAL(KIND=JPRB) :: zhook_handle
1082 !
1083 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFC0',0,zhook_handle)
1084 !
1085 yrec = hrec
1086 yfield = " "
1087 yfield(1:len(hfield)) = hfield
1088 !
1089  CALL test_record_len(dgu, &
1090  hprogram,yrec,lnowrite)
1091 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFC0',1,zhook_handle)
1092 IF(lnowrite)RETURN
1093 !
1094 IF (hprogram=='MESONH') THEN
1095 #ifdef SFX_MNH
1096  CALL write_surfc0_mnh(yrec,yfield,kresp,hcomment)
1097 #endif
1098 ENDIF
1099 !
1100 IF (hprogram=='AROME ') THEN
1101 #ifdef SFX_ARO
1102  CALL write_surfc0_aro(yrec,yfield,kresp,hcomment)
1103 #endif
1104 ENDIF
1105 !
1106 IF (nrank==npio) THEN
1107  !
1108 #ifdef SFX_MPI
1109  xtime0 = mpi_wtime()
1110 #endif
1111  !
1112 !$OMP SINGLE
1113  !
1114  IF (hprogram=='ASCII ') THEN
1115 #ifdef SFX_ASC
1116  CALL write_surf0_asc(&
1117  yrec,yfield,kresp,hcomment)
1118 #endif
1119  ENDIF
1120  !
1121  IF (hprogram=='FA ') THEN
1122 #ifdef SFX_FA
1123  CALL write_surf0_fa(&
1124  yrec,yfield,kresp,hcomment)
1125 #endif
1126  ENDIF
1127  !
1128  IF (hprogram=='OFFLIN') THEN
1129 #ifdef SFX_OL
1130  CALL write_surf0_ol(yrec,yfield,kresp,hcomment)
1131 #endif
1132  ENDIF
1133  !
1134  IF (hprogram=='TEXTE ') THEN
1135 #ifdef SFX_TXT
1136  CALL write_surf0_txt(yrec,yfield,kresp,hcomment)
1137 #endif
1138  ENDIF
1139  !
1140  IF (hprogram=='BINARY') THEN
1141 #ifdef SFX_BIN
1142  CALL write_surf0_bin(yrec,yfield,kresp,hcomment)
1143 #endif
1144  ENDIF
1145  !
1146  IF (hprogram=='LFI ') THEN
1147 #ifdef SFX_LFI
1148  CALL write_surf0_lfi(&
1149  yrec,yfield,kresp,hcomment)
1150 #endif
1151  ENDIF
1152  !
1153  IF (hprogram=='NC ') THEN
1154 #ifdef SFX_NC
1155  CALL write_surf0_nc(dgu, &
1156  yrec,yfield,kresp,hcomment)
1157 #endif
1158  ENDIF
1159  !
1160 !$OMP END SINGLE
1161  !
1162 #ifdef SFX_MPI
1163  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
1164 #endif
1165  !
1166 ENDIF
1167 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFC0',1,zhook_handle)
1168 !
1169 END SUBROUTINE write_surfc0
1170 !
1171 ! #############################################################
1172  SUBROUTINE write_surfl0 (DGU, U, &
1173  hprogram,hrec,ofield,kresp,hcomment)
1174 ! #############################################################
1175 !
1176 !!**** *WRITEL0* - routine to write a logical
1177 !
1178 !
1179 !
1180 !
1181 !
1183 USE modd_surf_atm_n, ONLY : surf_atm_t
1184 !
1185 USE yomhook ,ONLY : lhook, dr_hook
1186 USE parkind1 ,ONLY : jprb
1187 !
1188 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
1189 !
1190 #ifdef SFX_OL
1192 #endif
1193 #ifdef SFX_ASC
1195 #endif
1196 #ifdef SFX_TXT
1198 #endif
1199 #ifdef SFX_BIN
1201 #endif
1202 #ifdef SFX_FA
1204 #endif
1205 #ifdef SFX_LFI
1207 #endif
1208 #ifdef SFX_NC
1210 #endif
1211 #ifdef SFX_MNH
1212 USE modi_write_surfl0_mnh
1213 #endif
1214 !
1215 USE modi_test_record_len
1216 !
1217 IMPLICIT NONE
1218 !
1219 #ifdef SFX_MPI
1220 include "mpif.h"
1221 #endif
1222 !
1223 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1224 TYPE(surf_atm_t), INTENT(INOUT) :: u
1225 !
1226 !
1227 !* 0.1 Declarations of arguments
1228 !
1229  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1230  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1231 LOGICAL, INTENT(IN) :: ofield ! array containing the data field
1232 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1233  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1234 !
1235 !* 0.2 Declarations of local variables
1236 !
1237  CHARACTER(LEN=12) :: yrec
1238 LOGICAL :: lnowrite
1239 REAL :: xtime0
1240 REAL(KIND=JPRB) :: zhook_handle
1241 !
1242 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL0',0,zhook_handle)
1243 !
1244 yrec = hrec
1245 !
1246  CALL test_record_len(dgu, &
1247  hprogram,yrec,lnowrite)
1248 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL0',1,zhook_handle)
1249 IF(lnowrite)RETURN
1250 !
1251 IF (hprogram=='MESONH') THEN
1252 #ifdef SFX_MNH
1253  CALL write_surfl0_mnh(yrec,ofield,kresp,hcomment)
1254 #endif
1255 ENDIF
1256 !
1257 IF (hprogram=='AROME ') THEN
1258 #ifdef SFX_ARO
1259  CALL write_surfl0_aro(yrec,ofield,kresp,hcomment)
1260 #endif
1261 ENDIF
1262 !
1263 IF (nrank==npio) THEN
1264  !
1265 #ifdef SFX_MPI
1266  xtime0 = mpi_wtime()
1267 #endif
1268  !
1269 !$OMP SINGLE
1270  !
1271  IF (hprogram=='ASCII ') THEN
1272 #ifdef SFX_ASC
1273  CALL write_surf0_asc(&
1274  yrec,ofield,kresp,hcomment)
1275 #endif
1276  ENDIF
1277  !
1278  IF (hprogram=='FA ') THEN
1279 #ifdef SFX_FA
1280  CALL write_surf0_fa(&
1281  yrec,ofield,kresp,hcomment)
1282 #endif
1283  ENDIF
1284  !
1285  IF (hprogram=='OFFLIN') THEN
1286 #ifdef SFX_OL
1287  CALL write_surf0_ol(yrec,ofield,kresp,hcomment)
1288 #endif
1289  ENDIF
1290  !
1291  IF (hprogram=='TEXTE ') THEN
1292 #ifdef SFX_TXT
1293  CALL write_surf0_txt(yrec,ofield,kresp,hcomment)
1294 #endif
1295  ENDIF
1296  !
1297  IF (hprogram=='BINARY') THEN
1298 #ifdef SFX_BIN
1299  CALL write_surf0_bin(yrec,ofield,kresp,hcomment)
1300 #endif
1301  ENDIF
1302  !
1303  IF (hprogram=='LFI ') THEN
1304 #ifdef SFX_LFI
1305  CALL write_surf0_lfi(&
1306  yrec,ofield,kresp,hcomment)
1307 #endif
1308  ENDIF
1309  !
1310  IF (hprogram=='NC ') THEN
1311 #ifdef SFX_NC
1312  CALL write_surf0_nc(dgu, &
1313  yrec,ofield,kresp,hcomment)
1314 #endif
1315  ENDIF
1316  !
1317 !$OMP END SINGLE
1318  !
1319 #ifdef SFX_MPI
1320  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
1321 #endif
1322  !
1323 ENDIF
1324 !
1325 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL0',1,zhook_handle)
1326 !
1327 END SUBROUTINE write_surfl0
1328 !
1329 ! #############################################################
1330  SUBROUTINE write_surfl1 (DGU, U, &
1331  hprogram,hrec,ofield,kresp,hcomment,hdir)
1332 ! #############################################################
1333 !
1334 !!**** *WRITEL1* - routine to write a logical array
1335 !
1336 !
1337 !
1338 !
1339 !
1341 USE modd_surf_atm_n, ONLY : surf_atm_t
1342 !
1343 USE modd_surfex_mpi, ONLY : wlog_mpi
1344 USE yomhook ,ONLY : lhook, dr_hook
1345 USE parkind1 ,ONLY : jprb
1346 !
1347 #ifdef SFX_OL
1349 #endif
1350 #ifdef SFX_ASC
1352 #endif
1353 #ifdef SFX_TXT
1355 #endif
1356 #ifdef SFX_BIN
1358 #endif
1359 #ifdef SFX_FA
1361 #endif
1362 #ifdef SFX_LFI
1364 #endif
1365 #ifdef SFX_NC
1367 #endif
1368 #ifdef SFX_MNH
1369 USE modi_write_surfl1_mnh
1370 #endif
1371 !
1372 USE modi_test_record_len
1373 !
1374 IMPLICIT NONE
1375 !
1376 !* 0.1 Declarations of arguments
1377 !
1378  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1379 !
1380 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1381 TYPE(surf_atm_t), INTENT(INOUT) :: u
1382 !
1383  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1384 LOGICAL, DIMENSION(:), INTENT(IN) :: ofield ! array containing the data field
1385 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1386  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1387  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: hdir ! type of field :
1388 ! ! 'H' : field with
1389 ! ! horizontal spatial dim.
1390 ! ! '-' : no horizontal dim.
1391 !* 0.2 Declarations of local variables
1392 !
1393  CHARACTER(LEN=12) :: yrec
1394 INTEGER :: il
1395  CHARACTER(LEN=1) :: ydir
1396 LOGICAL :: lnowrite
1397 REAL(KIND=JPRB) :: zhook_handle
1398 !
1399 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL1',0,zhook_handle)
1400 !
1401 yrec = hrec
1402 ydir = 'H'
1403 IF (present(hdir)) ydir = hdir
1404 il = SIZE(ofield)
1405 !
1406  CALL test_record_len(dgu, &
1407  hprogram,yrec,lnowrite)
1408 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL1',1,zhook_handle)
1409 IF(lnowrite)RETURN
1410 !
1411 IF (hprogram=='MESONH') THEN
1412 #ifdef SFX_MNH
1413  CALL write_surfl1_mnh(yrec,il,ofield,kresp,hcomment,ydir)
1414 #endif
1415 ENDIF
1416 !
1417 IF (hprogram=='AROME ') THEN
1418 #ifdef SFX_ARO
1419  CALL write_surfl1_aro(yrec,il,ofield,kresp,hcomment,ydir)
1420 #endif
1421 ENDIF
1422 !
1423 IF (hprogram=='OFFLIN') THEN
1424 #ifdef SFX_OL
1425  CALL write_surfl1x2_ol(yrec,ofield,kresp,hcomment,ydir)
1426 #endif
1427 ENDIF
1428 !
1429 IF (hprogram=='TEXTE ') THEN
1430 #ifdef SFX_TXT
1431  CALL write_surfn_txt(yrec,ofield,kresp,hcomment,ydir)
1432 #endif
1433 ENDIF
1434 !
1435 IF (hprogram=='BINARY') THEN
1436 #ifdef SFX_BIN
1437  CALL write_surfn_bin(yrec,ofield,kresp,hcomment,ydir)
1438 #endif
1439 ENDIF
1440 !
1441 IF (hprogram=='LFI ') THEN
1442 #ifdef SFX_LFI
1443  CALL write_surfn_lfi(&
1444  yrec,ofield,kresp,hcomment,ydir)
1445 #endif
1446 ENDIF
1447 !
1448 IF (hprogram=='NC ') THEN
1449 #ifdef SFX_NC
1450  CALL write_surfn_nc(dgu, &
1451  yrec,ofield,kresp,hcomment,ydir)
1452 #endif
1453 ENDIF
1454 !
1455 IF (hprogram=='ASCII ') THEN
1456 #ifdef SFX_ASC
1457  CALL write_surfn_asc(&
1458  yrec,ofield,kresp,hcomment,ydir)
1459 #endif
1460 ENDIF
1461 !
1462 IF (hprogram=='FA ') THEN
1463 #ifdef SFX_FA
1464  CALL write_surfn_fa(&
1465  yrec,il,ofield,kresp,hcomment,ydir)
1466 #endif
1467 ENDIF
1468 !
1469 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFL1',1,zhook_handle)
1470 !
1471 END SUBROUTINE write_surfl1
1472 !
1473 ! #############################################################
1474  SUBROUTINE write_surft0 (DGU, U, &
1475  hprogram,hrec,tfield,kresp,hcomment)
1476 ! #############################################################
1477 !
1478 !!**** *WRITET0* - routine to write a MESO-NH date_time scalar
1479 !
1480 !
1481 !
1482 !
1483 !
1485 USE modd_surf_atm_n, ONLY : surf_atm_t
1486 !
1488 !
1489 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
1490 !
1491 USE yomhook ,ONLY : lhook, dr_hook
1492 USE parkind1 ,ONLY : jprb
1493 !
1494 #ifdef SFX_OL
1496 #endif
1497 #ifdef SFX_ASC
1499 #endif
1500 #ifdef SFX_TXT
1502 #endif
1503 #ifdef SFX_BIN
1505 #endif
1506 #ifdef SFX_FA
1508 #endif
1509 #ifdef SFX_LFI
1511 #endif
1512 #ifdef SFX_NC
1514 #endif
1515 #ifdef SFX_MNH
1516 USE modi_write_surft0_mnh
1517 #endif
1518 !
1519 USE modi_test_record_len
1520 !
1521 IMPLICIT NONE
1522 !
1523 #ifdef SFX_MPI
1524 include "mpif.h"
1525 #endif
1526 !
1527 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1528 TYPE(surf_atm_t), INTENT(INOUT) :: u
1529 !
1530 !
1531 !* 0.1 Declarations of arguments
1532 !
1533  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1534  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1535 TYPE (date_time), INTENT(IN) :: tfield ! array containing the data field
1536 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1537  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1538 !
1539 !* 0.2 Declarations of local variables
1540 !
1541  CHARACTER(LEN=12) :: yrec
1542 REAL :: ztime
1543 REAL :: xtime0
1544 INTEGER :: iday
1545 INTEGER :: imonth
1546 INTEGER :: iyear
1547 LOGICAL :: lnowrite
1548 REAL(KIND=JPRB) :: zhook_handle
1549 !
1550 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT0',0,zhook_handle)
1551 !
1552 yrec = hrec
1553 !
1554 iyear = tfield%TDATE%YEAR
1555 imonth = tfield%TDATE%MONTH
1556 iday = tfield%TDATE%DAY
1557 ztime = tfield%TIME
1558 !
1559  CALL test_record_len(dgu, &
1560  hprogram,yrec,lnowrite)
1561 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT0',1,zhook_handle)
1562 IF(lnowrite)RETURN
1563 !
1564 IF (hprogram=='MESONH') THEN
1565 #ifdef SFX_MNH
1566  CALL write_surft0_mnh(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1567 #endif
1568 ENDIF
1569 !
1570 IF (hprogram=='AROME ') THEN
1571 #ifdef SFX_ARO
1572  CALL write_surft0_aro(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1573 #endif
1574 ENDIF
1575 !
1576 IF (nrank==npio) THEN
1577  !
1578 #ifdef SFX_MPI
1579  xtime0 = mpi_wtime()
1580 #endif
1581  !
1582 !$OMP SINGLE
1583  !
1584  IF (hprogram=='ASCII ') THEN
1585 #ifdef SFX_ASC
1586  CALL write_surft_asc(&
1587  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1588 #endif
1589  ENDIF
1590  !
1591  IF (hprogram=='FA ') THEN
1592 #ifdef SFX_FA
1593  CALL write_surft_fa(&
1594  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1595 #endif
1596  ENDIF
1597  !
1598  IF (hprogram=='OFFLIN') THEN
1599 #ifdef SFX_OL
1600  CALL write_surft_ol(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1601 #endif
1602  ENDIF
1603  !
1604  IF (hprogram=='TEXTE ') THEN
1605 #ifdef SFX_TXT
1606  CALL write_surft_txt(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1607 #endif
1608  ENDIF
1609  !
1610  IF (hprogram=='BINARY') THEN
1611 #ifdef SFX_BIN
1612  CALL write_surft_bin(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1613 #endif
1614  ENDIF
1615  !
1616  IF (hprogram=='LFI ') THEN
1617 #ifdef SFX_LFI
1618  CALL write_surft_lfi(&
1619  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1620 #endif
1621  ENDIF
1622  !
1623  IF (hprogram=='NC ') THEN
1624 #ifdef SFX_NC
1625  CALL write_surft_nc(dgu, &
1626  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1627 #endif
1628  ENDIF
1629  !
1630 !$OMP END SINGLE
1631  !
1632 #ifdef SFX_MPI
1633  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
1634 #endif
1635  !
1636 ENDIF
1637 !
1638 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT0',1,zhook_handle)
1639 !
1640 END SUBROUTINE write_surft0
1641 !
1642 ! #############################################################
1643  SUBROUTINE write_surft1 (DGU, U, &
1644  hprogram,hrec,tfield,kresp,hcomment)
1645 ! #############################################################
1646 !
1647 !!**** *READT2* - routine to read a MESO-NH date_time array
1648 !
1649 !
1650 !
1651 !
1652 !
1654 USE modd_surf_atm_n, ONLY : surf_atm_t
1655 !
1656 USE modd_surfex_mpi, ONLY : wlog_mpi
1658 !
1659 USE yomhook ,ONLY : lhook, dr_hook
1660 USE parkind1 ,ONLY : jprb
1661 !
1662 #ifdef SFX_ASC
1664 #endif
1665 #ifdef SFX_LFI
1667 #endif
1668 #ifdef SFX_NC
1670 #endif
1671 #ifdef SFX_MNH
1672 USE modi_write_surft1_mnh
1673 #endif
1674 !
1675 USE modi_abor1_sfx
1676 USE modi_test_record_len
1677 !
1678 IMPLICIT NONE
1679 !
1680 !* 0.1 Declarations of arguments
1681 !
1682  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1683 !
1684 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1685 TYPE(surf_atm_t), INTENT(INOUT) :: u
1686 !
1687  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1688 TYPE (date_time), DIMENSION(:), INTENT(IN) :: tfield ! array containing the data field
1689 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1690  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1691 !
1692 !* 0.2 Declarations of local variables
1693 !
1694  CHARACTER(LEN=12) :: yrec
1695 INTEGER :: il1
1696 REAL , DIMENSION(SIZE(TFIELD,1)) :: ztime
1697 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: iday
1698 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: imonth
1699 INTEGER, DIMENSION(SIZE(TFIELD,1)) :: iyear
1700 LOGICAL :: lnowrite
1701 REAL(KIND=JPRB) :: zhook_handle
1702 !
1703 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT1',0,zhook_handle)
1704 !
1705 yrec = hrec
1706 il1 = SIZE(tfield,1)
1707 !
1708 iyear(:) = tfield(:)%TDATE%YEAR
1709 imonth(:) = tfield(:)%TDATE%MONTH
1710 iday(:) = tfield(:)%TDATE%DAY
1711 ztime(:) = tfield(:)%TIME
1712 !
1713  CALL test_record_len(dgu, &
1714  hprogram,yrec,lnowrite)
1715 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT1',1,zhook_handle)
1716 IF(lnowrite)RETURN
1717 !
1718 IF (hprogram=='MESONH') THEN
1719  !G .TANGUY 03/2009
1720  !CALL ABOR1_SFX('WRITE_SURFT1: NOT AVAILABLE FOR MESONH')
1721 #ifdef SFX_MNH
1722  CALL write_surft1_mnh(yrec,il1,iyear,imonth,iday,ztime,kresp,hcomment)
1723 #endif
1724 ENDIF
1725 !
1726 IF (hprogram=='AROME ') THEN
1727 #ifdef SFX_ARO
1728  CALL write_surft1_aro(yrec,il1,iyear,imonth,iday,ztime,kresp,hcomment)
1729 #endif
1730 ENDIF
1731 !
1732 !IF (HPROGRAM=='OFFLIN') THEN
1733 ! CALL ABOR1_SFX('WRITE_SURFT1: NOT AVAILABLE FOR OFFLIN')
1734 !ENDIF
1735 !
1736 !plm IF (HPROGRAM=='TEXTE ') THEN
1737 !plm CALL WRITE_SURFT1_TXT(YREC,IL1,IYEAR,IMONTH,IDAY,ZTIME,KRESP,HCOMMENT)
1738 !plm ENDIF
1739 !
1740 IF (hprogram=='LFI ') THEN
1741 #ifdef SFX_LFI
1742  CALL write_surft_lfi(&
1743  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1744 #endif
1745 ENDIF
1746 !
1747 IF (hprogram=='NC ') THEN
1748 #ifdef SFX_NC
1749  CALL write_surft_nc(dgu, &
1750  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1751 #endif
1752 ENDIF
1753 !
1754 IF (hprogram=='ASCII ') THEN
1755 #ifdef SFX_ASC
1756  CALL write_surft_asc(&
1757  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1758 #endif
1759 ENDIF
1760 !
1761 IF (hprogram=='FA ') THEN
1762  CALL abor1_sfx('WRITE_SURFT1: NOT AVAILABLE FOR FA')
1763 ENDIF
1764 !
1765 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT1',1,zhook_handle)
1766 !
1767 END SUBROUTINE write_surft1
1768 !
1769 ! #############################################################
1770  SUBROUTINE write_surft2 (DGU, U, &
1771  hprogram,hrec,tfield,kresp,hcomment)
1772 ! #############################################################
1773 !
1774 !!**** *WRITET2* - routine to write a MESO-NH date_time array
1775 !
1776 !
1777 !
1778 !
1779 !
1781 USE modd_surf_atm_n, ONLY : surf_atm_t
1782 !
1783 USE modd_surfex_mpi, ONLY : wlog_mpi
1785 !
1786 USE yomhook ,ONLY : lhook, dr_hook
1787 USE parkind1 ,ONLY : jprb
1788 !
1789 #ifdef SFX_ASC
1791 #endif
1792 #ifdef SFX_TXT
1794 #endif
1795 #ifdef SFX_BIN
1797 #endif
1798 #ifdef SFX_FA
1800 #endif
1801 #ifdef SFX_NC
1803 #endif
1804 #ifdef SFX_LFI
1806 #endif
1807 !
1808 USE modi_abor1_sfx
1809 USE modi_test_record_len
1810 !
1811 IMPLICIT NONE
1812 !
1813 !* 0.1 Declarations of arguments
1814 !
1815  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
1816 !
1817 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
1818 TYPE(surf_atm_t), INTENT(INOUT) :: u
1819 !
1820  CHARACTER(LEN=*), INTENT(IN) :: hrec ! name of the article to be written
1821 TYPE (date_time), DIMENSION(:,:), INTENT(IN) :: tfield ! array containing the data field
1822 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
1823  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! Comment string
1824 !
1825 !* 0.2 Declarations of local variables
1826 !
1827  CHARACTER(LEN=12) :: yrec
1828 INTEGER :: il1, il2
1829 REAL , DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: ztime
1830 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: iday
1831 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: imonth
1832 INTEGER, DIMENSION(SIZE(TFIELD,1),SIZE(TFIELD,2)) :: iyear
1833 LOGICAL :: lnowrite
1834 REAL(KIND=JPRB) :: zhook_handle
1835 !
1836 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT2',0,zhook_handle)
1837 !
1838 yrec = hrec
1839 il1 = SIZE(tfield,1)
1840 il2 = SIZE(tfield,2)
1841 !
1842 iyear(:,:) = tfield(:,:)%TDATE%YEAR
1843 imonth(:,:) = tfield(:,:)%TDATE%MONTH
1844 iday(:,:) = tfield(:,:)%TDATE%DAY
1845 ztime(:,:) = tfield(:,:)%TIME
1846 !
1847  CALL test_record_len(dgu, &
1848  hprogram,yrec,lnowrite)
1849 IF(lnowrite .AND. lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT2',1,zhook_handle)
1850 IF(lnowrite)RETURN
1851 !
1852 IF (hprogram=='MESONH') THEN
1853  CALL abor1_sfx('WRITE_SURFT2: NOT AVAILABLE FOR MESONH')
1854 ENDIF
1855 !
1856 IF (hprogram=='AROME ') THEN
1857  CALL abor1_sfx('WRITE_SURFT2: NOT AVAILABLE FOR AROME')
1858 ENDIF
1859 !
1860 !IF (HPROGRAM=='OFFLIN') THEN
1861 ! CALL ABOR1_SFX('WRITE_SURFT2: NOT AVAILABLE FOR OFFLIN')
1862 !ENDIF
1863 !
1864 IF (hprogram=='LFI ') THEN
1865 #ifdef SFX_LFI
1866  CALL write_surft_lfi(&
1867  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1868 #endif
1869 ENDIF
1870 !
1871 IF (hprogram=='TEXTE ') THEN
1872 #ifdef SFX_TXT
1873  CALL write_surft_txt(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1874 #endif
1875 ENDIF
1876 !
1877 IF (hprogram=='BINARY') THEN
1878 #ifdef SFX_BIN
1879  CALL write_surft_bin(yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1880 #endif
1881 ENDIF
1882 !
1883 IF (hprogram=='ASCII ') THEN
1884 #ifdef SFX_ASC
1885  CALL write_surft_asc(&
1886  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1887 #endif
1888 ENDIF
1889 !
1890 IF (hprogram=='FA ') THEN
1891 #ifdef SFX_FA
1892  CALL write_surft_fa(&
1893  yrec,il1,il2,iyear,imonth,iday,ztime,kresp,hcomment)
1894 #endif
1895 ENDIF
1896 !
1897 IF (hprogram=='NC ') THEN
1898 #ifdef SFX_NC
1899  CALL write_surft_nc(dgu, &
1900  yrec,iyear,imonth,iday,ztime,kresp,hcomment)
1901 #endif
1902 ENDIF
1903 !
1904 IF (lhook) CALL dr_hook('MODI_WRITE_SURF:WRITE_SURFT2',1,zhook_handle)
1905 !
1906 END SUBROUTINE write_surft2
subroutine write_surfx0(DGU, U, HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT)
Definition: write_surf.F90:233
subroutine write_surfl1(DGU, U, HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT, HDIR)
subroutine write_surfx1(DGU, U, HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR, HNAM_DIM)
Definition: write_surf.F90:395
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine write_surfl0(DGU, U, HPROGRAM, HREC, OFIELD, KRESP, HCOMMENT)
subroutine write_surfc0(DGU, U, HPROGRAM, HREC, HFIELD, KRESP, HCOMMENT)
subroutine write_surft2(DGU, U, HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT)
subroutine write_surfn0(DGU, U, HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT)
Definition: write_surf.F90:702
subroutine write_surft1(DGU, U, HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT)
subroutine test_record_len(DGU, HPROGRAM, HREC, ONOWRITE)
subroutine write_surfx2(DGU, U, HPROGRAM, HREC, PFIELD, KRESP, HCOMMENT, HDIR, HNAM_DIM)
Definition: write_surf.F90:548
subroutine write_surfn1(DGU, U, HPROGRAM, HREC, KFIELD, KRESP, HCOMMENT, HDIR, HNAM_DIM)
Definition: write_surf.F90:861
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
subroutine write_surft0(DGU, U, HPROGRAM, HREC, TFIELD, KRESP, HCOMMENT)