SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
mode_write_surf_asc.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.
6 !
7 INTERFACE write_surf0_asc
8  MODULE PROCEDURE write_surfx0_asc
9  MODULE PROCEDURE write_surfn0_asc
10  MODULE PROCEDURE write_surfl0_asc
11  MODULE PROCEDURE write_surfc0_asc
12 END INTERFACE
13 INTERFACE write_surfn_asc
14  MODULE PROCEDURE write_surfx1_asc
15  MODULE PROCEDURE write_surfn1_asc
16  MODULE PROCEDURE write_surfl1_asc
17  MODULE PROCEDURE write_surfx2_asc
18 END INTERFACE
19 INTERFACE write_surft_asc
20  MODULE PROCEDURE write_surft0_asc
21  MODULE PROCEDURE write_surft1_asc
22  MODULE PROCEDURE write_surft2_asc
23 END INTERFACE
24 !
25  CONTAINS
26 !
27 ! #############################################################
28  SUBROUTINE write_surfx0_asc (&
29  hrec,pfield,kresp,hcomment)
30 ! #############################################################
31 !
32 !!**** * - routine to write a real scalar
33 !
34 !
35 !
36 !
37 USE modd_surfex_omp, ONLY : lwork0
38 !
39 USE modd_io_surf_asc, ONLY : nunit, cmask
40 !
41 USE modi_io_buff
42 USE modi_error_write_surf_asc
43 !
44 USE yomhook ,ONLY : lhook, dr_hook
45 USE parkind1 ,ONLY : jprb
46 !
47 IMPLICIT NONE
48 !
49 !* 0.1 Declarations of arguments
50 !
51 !
52 !
53  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
54 REAL, INTENT(IN) :: pfield ! the real scalar to be read
55 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
56  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
57 !
58 !* 0.2 Declarations of local variables
59 !
60 REAL(KIND=JPRB) :: zhook_handle
61 !
62 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',0,zhook_handle)
63 !
64 kresp=0
65 !
66  CALL io_buff(&
67  hrec,'W',lwork0)
68 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,zhook_handle)
69 IF (lwork0) RETURN
70 !
71 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//hrec
72 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
73 WRITE(nunit,fmt=*,err=100) pfield
74 !
75 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,zhook_handle)
76 RETURN
77 !
78 100 CONTINUE
79  CALL error_write_surf_asc(hrec,kresp)
80 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX0_ASC',1,zhook_handle)
81 !
82 END SUBROUTINE write_surfx0_asc
83 !
84 ! #############################################################
85  SUBROUTINE write_surfn0_asc (&
86  hrec,kfield,kresp,hcomment)
87 ! #############################################################
88 !
89 !!**** * - routine to write an integer
90 !
91 !
92 !
93 !
94 USE modd_surfex_omp, ONLY : lwork0
95 !
96 USE modd_io_surf_asc, ONLY : nunit, nmask, cmask
97 !
98 USE modi_io_buff
99 USE modi_error_write_surf_asc
100 !
101 USE yomhook ,ONLY : lhook, dr_hook
102 USE parkind1 ,ONLY : jprb
103 !
104 IMPLICIT NONE
105 !
106 !* 0.1 Declarations of arguments
107 !
108 !
109 !
110  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
111 INTEGER, INTENT(IN) :: kfield ! the integer to be read
112 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
113  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
114 !
115 !* 0.2 Declarations of local variables
116 !
117 REAL(KIND=JPRB) :: zhook_handle
118 !
119 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',0,zhook_handle)
120 !
121 kresp=0
122 !
123  CALL io_buff(&
124  hrec,'W',lwork0)
125 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,zhook_handle)
126 IF (lwork0) RETURN
127 !
128 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//hrec
129 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
130 WRITE(nunit,fmt=*,err=100) kfield
131 !
132 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,zhook_handle)
133 RETURN
134 !
135 100 CONTINUE
136  CALL error_write_surf_asc(hrec,kresp)
137 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN0_ASC',1,zhook_handle)
138 !
139 END SUBROUTINE write_surfn0_asc
140 !
141 ! #############################################################
142  SUBROUTINE write_surfl0_asc (&
143  hrec,ofield,kresp,hcomment)
144 ! #############################################################
145 !
146 !!**** * - routine to write a logical
147 !
148 !
149 !
150 !
151 USE modd_surfex_omp, ONLY : lwork0
152 !
153 USE modd_io_surf_asc, ONLY : nunit, cmask
154 !
155 USE modi_io_buff
156 USE modi_error_write_surf_asc
157 !
158 USE yomhook ,ONLY : lhook, dr_hook
159 USE parkind1 ,ONLY : jprb
160 !
161 IMPLICIT NONE
162 !
163 !* 0.1 Declarations of arguments
164 !
165 !
166 !
167  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
168 LOGICAL, INTENT(IN) :: ofield ! array containing the data field
169 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
170  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
171 !
172 !* 0.2 Declarations of local variables
173 !
174 REAL(KIND=JPRB) :: zhook_handle
175 !
176 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',0,zhook_handle)
177 !
178 kresp=0
179 !
180  CALL io_buff(&
181  hrec,'W',lwork0)
182 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,zhook_handle)
183 IF (lwork0) RETURN
184 !
185 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//hrec
186 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
187 WRITE(nunit,fmt=*,err=100) ofield
188 !
189 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,zhook_handle)
190 RETURN
191 !
192 100 CONTINUE
193  CALL error_write_surf_asc(hrec,kresp)
194 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL0_ASC',1,zhook_handle)
195 !
196 END SUBROUTINE write_surfl0_asc
197 !
198 ! #############################################################
199  SUBROUTINE write_surfc0_asc (&
200  hrec,hfield,kresp,hcomment)
201 ! #############################################################
202 !
203 !!**** * - routine to write a character
204 !
205 !
206 !
207 !
208 USE modd_surfex_omp, ONLY : lwork0
209 !
210 USE modd_io_surf_asc, ONLY : nunit, cmask
211 !
212 USE modi_io_buff
213 USE modi_error_write_surf_asc
214 !
215 USE yomhook ,ONLY : lhook, dr_hook
216 USE parkind1 ,ONLY : jprb
217 !
218 IMPLICIT NONE
219 !
220 !* 0.1 Declarations of arguments
221 !
222 !
223 !
224  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
225  CHARACTER(LEN=40), INTENT(IN) :: hfield ! the integer to be read
226 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
227  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
228 !
229 !* 0.2 Declarations of local variables
230 !
231 REAL(KIND=JPRB) :: zhook_handle
232 !
233 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',0,zhook_handle)
234 !
235 kresp=0
236 !
237  CALL io_buff(&
238  hrec,'W',lwork0)
239 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,zhook_handle)
240 IF (lwork0) RETURN
241 !
242 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//hrec
243 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
244 WRITE(nunit,fmt='(A40)',err=100) hfield
245 !
246 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,zhook_handle)
247 RETURN
248 !
249 100 CONTINUE
250  CALL error_write_surf_asc(hrec,kresp)
251 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFC0_ASC',1,zhook_handle)
252 !
253 END SUBROUTINE write_surfc0_asc
254 !
255 ! #############################################################
256  SUBROUTINE write_surfx1_asc (&
257  hrec,pfield,kresp,hcomment,hdir)
258 ! #############################################################
259 !
260 !!**** * - routine to fill a write 1D array for the externalised surface
261 !
262 !
263 !
264 !
265 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
266 !
267 USE modd_surfex_omp, ONLY : lwork0, nworkb, nblock
268 !
269 USE modd_io_surf_asc, ONLY : nunit, nmask, nfull, cmask
270 !
271 USE modi_io_buff
272 USE modi_error_write_surf_asc
274 !
275 USE yomhook ,ONLY : lhook, dr_hook
276 USE parkind1 ,ONLY : jprb
277 !
278 IMPLICIT NONE
279 !
280 #ifdef SFX_MPI
281 include "mpif.h"
282 #endif
283 !
284 !* 0.1 Declarations of arguments
285 !
286 !
287 !
288  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
289 REAL, DIMENSION(:), INTENT(IN) :: pfield ! array containing the data field
290 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
291  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
292  CHARACTER(LEN=1), INTENT(IN) :: hdir ! type of field :
293  ! 'H' : field with
294  ! horizontal spatial dim.
295  ! '-' : no horizontal dim.
296 !* 0.2 Declarations of local variables
297 !
298 INTEGER :: isize, j
299 REAL :: xtime0
300 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD))) :: zwork ! work array read in the file
301 REAL(KIND=JPRB) :: zhook_handle
302 !
303 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',0,zhook_handle)
304 !
305 !$OMP BARRIER
306 !
307 !$OMP SINGLE
308 !
309 nworkb=0
310 !
311  CALL io_buff(&
312  hrec,'W',lwork0)
313 !
314 !$OMP END SINGLE
315 !
316 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',1,zhook_handle)
317 IF (lwork0) RETURN
318 !
319 IF (hdir=='-') THEN
320  isize = SIZE(pfield)
321  zwork(1:isize) = pfield
322 ELSE
323  isize = SIZE(zwork)
324  CALL gather_and_write_mpi(pfield,zwork,nmask)
325 ENDIF
326 !
327 IF (nrank==npio) THEN
328  !
329 #ifdef SFX_MPI
330  xtime0 = mpi_wtime()
331 #endif
332  !
333 !$OMP SINGLE
334  !
335  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//hrec
336  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
337  WRITE(nunit,fmt='(50D20.8)',iostat=nworkb) zwork(1:isize)
338  !
339 !$OMP END SINGLE
340  !
341  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
342  !
343 #ifdef SFX_MPI
344  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
345 #endif
346  !
347 ENDIF
348 !
349 kresp = nworkb
350 !
351 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX1_ASC',1,zhook_handle)
352 !
353 END SUBROUTINE write_surfx1_asc
354 !
355 ! #############################################################
356  SUBROUTINE write_surfx2_asc (&
357  hrec,pfield,kresp,hcomment,hdir)
358 ! #############################################################
359 !
360 !!**** * - routine to fill a write 2D array for the externalised surface
361 !
362 !
363 !
364 !
365 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write, wlog_mpi
366 !
367 USE modd_surfex_omp, ONLY : lwork0, nworkb
368 !
369 USE modd_io_surf_asc, ONLY : nunit, nmask, nfull, cmask
370 !
371 USE modi_io_buff
372 USE modi_error_write_surf_asc
374 !
375 USE yomhook ,ONLY : lhook, dr_hook
376 USE parkind1 ,ONLY : jprb
377 !
378 IMPLICIT NONE
379 !
380 #ifdef SFX_MPI
381 include "mpif.h"
382 #endif
383 !
384 !* 0.1 Declarations of arguments
385 !
386 !
387 !
388  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
389 REAL, DIMENSION(:,:), INTENT(IN) :: pfield ! array containing the data field
390 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
391  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
392  CHARACTER(LEN=1), INTENT(IN) :: hdir ! type of field :
393  ! 'H' : field with
394  ! horizontal spatial dim.
395  ! '-' : no horizontal dim.
396 !* 0.2 Declarations of local variables
397 !
398 INTEGER :: isize
399 REAL :: xtime0
400 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD,1)),SIZE(PFIELD,2)) :: zwork ! work array read in the file
401 REAL(KIND=JPRB) :: zhook_handle
402 !
403 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',0,zhook_handle)
404 !
405 !$OMP BARRIER
406 !
407 !$OMP SINGLE
408 !
409 nworkb=0
410 !
411  CALL io_buff(&
412  hrec,'W',lwork0)
413 !
414 !$OMP END SINGLE
415 !
416 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',1,zhook_handle)
417 IF (lwork0) RETURN
418 !
419 IF (hdir=='-') THEN
420  isize = SIZE(pfield,1)
421  zwork(1:isize,:) = pfield(:,:)
422 ELSE
423  isize = SIZE(zwork,1)
424  CALL gather_and_write_mpi(pfield,zwork,nmask)
425 ENDIF
426 !
427 IF (nrank==npio) THEN
428  !
429 #ifdef SFX_MPI
430  xtime0 = mpi_wtime()
431 #endif
432  !
433 !$OMP SINGLE
434  !
435  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//hrec
436  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
437  WRITE(nunit,fmt='(50D20.8)',iostat=nworkb) zwork(1:isize,:)
438  !
439 !$OMP END SINGLE
440  !
441  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
442  !
443 #ifdef SFX_MPI
444  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
445 #endif
446  !
447 ENDIF
448 !
449 kresp = nworkb
450 !
451 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFX2_ASC',1,zhook_handle)
452 !
453 END SUBROUTINE write_surfx2_asc
454 !
455 ! #############################################################
456  SUBROUTINE write_surfn1_asc (&
457  hrec,kfield,kresp,hcomment,hdir)
458 ! #############################################################
459 !
460 !!**** * - routine to write an integer array
461 !
462 !
463 !
464 !
465 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write
466 !
467 USE modd_surfex_omp, ONLY : lwork0, nworkb
468 !
469 USE modd_io_surf_asc, ONLY : nunit, nmask, nfull, cmask
470 !
471 USE modi_io_buff
472 USE modi_error_write_surf_asc
474 !
475 USE yomhook ,ONLY : lhook, dr_hook
476 USE parkind1 ,ONLY : jprb
477 !
478 IMPLICIT NONE
479 !
480 #ifdef SFX_MPI
481 include "mpif.h"
482 #endif
483 !
484 !* 0.1 Declarations of arguments
485 !
486 !
487 !
488  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
489 INTEGER, DIMENSION(:), INTENT(IN) :: kfield ! the integer to be read
490 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
491  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
492  CHARACTER(LEN=1), INTENT(IN) :: hdir ! type of field :
493  ! 'H' : field with
494  ! horizontal spatial dim.
495  ! '-' : no horizontal dim.
496 !* 0.2 Declarations of local variables
497 !
498 INTEGER :: isize
499 INTEGER, DIMENSION(MAX(NFULL,SIZE(KFIELD))) :: iwork ! work array read in the file
500 REAL :: xtime0
501 REAL(KIND=JPRB) :: zhook_handle
502 !
503 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',0,zhook_handle)
504 !
505 !$OMP SINGLE
506 !
507 nworkb = 0
508 !
509  CALL io_buff(&
510  hrec,'W',lwork0)
511 !
512 !$OMP END SINGLE
513 !
514 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',1,zhook_handle)
515 IF (lwork0) RETURN
516 !
517 IF (hdir=='-' .OR. hrec=='-') THEN
518  isize = SIZE(kfield)
519  iwork(1:isize) = kfield
520 ELSE
521  isize = SIZE(iwork)
522  CALL gather_and_write_mpi(kfield,iwork,nmask)
523 ENDIF
524 !
525 IF (nrank==npio) THEN
526  !
527 #ifdef SFX_MPI
528  xtime0 = mpi_wtime()
529 #endif
530  !
531 !$OMP SINGLE
532  !
533  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//hrec
534  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
535  WRITE(nunit,fmt='(100I8)',iostat=nworkb) iwork(1:isize)
536  !
537 !$OMP END SINGLE
538  !
539  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
540  !
541 #ifdef SFX_MPI
542  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
543 #endif
544  !
545 ENDIF
546 !
547 kresp = nworkb
548 !
549 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFN1_ASC',1,zhook_handle)
550 !
551 END SUBROUTINE write_surfn1_asc
552 !
553 ! #############################################################
554  SUBROUTINE write_surfl1_asc (&
555  hrec,ofield,kresp,hcomment,hdir)
556 ! #############################################################
557 !
558 !!**** * - routine to write a logical array
559 !
560 !
561 !
562 !
563 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write
564 !
565 USE modd_surfex_omp, ONLY : lwork0, nworkb
566 !
567 USE modd_io_surf_asc, ONLY : nunit, cmask
568 !
569 USE modi_io_buff
570 USE modi_error_write_surf_asc
571 !
572 USE yomhook ,ONLY : lhook, dr_hook
573 USE parkind1 ,ONLY : jprb
574 !
575 IMPLICIT NONE
576 !
577 #ifdef SFX_MPI
578 include "mpif.h"
579 #endif
580 !
581 !* 0.1 Declarations of arguments
582 !
583 !
584 !
585  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
586 LOGICAL, DIMENSION(:), INTENT(IN) :: ofield ! array containing the data field
587 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
588  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
589  CHARACTER(LEN=1), INTENT(IN) :: hdir ! type of field :
590  ! 'H' : field with
591  ! horizontal spatial dim.
592  ! '-' : no horizontal dim.
593 !* 0.2 Declarations of local variables
594 !
595 REAL :: xtime0
596 REAL(KIND=JPRB) :: zhook_handle
597 !
598 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',0,zhook_handle)
599 !
600 !$OMP SINGLE
601 !
602 nworkb = 0
603 !
604  CALL io_buff(&
605  hrec,'W',lwork0)
606 !
607 !$OMP END SINGLE
608 !
609 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',1,zhook_handle)
610 IF (lwork0) RETURN
611 !
612 IF (nrank==npio) THEN
613  !
614 #ifdef SFX_MPI
615  xtime0 = mpi_wtime()
616 #endif
617  !
618 !$OMP SINGLE
619  !
620  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//hrec
621  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
622  WRITE(nunit,fmt=*,iostat=nworkb) ofield
623  !
624 !$OMP END SINGLE
625  !
626  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
627  !
628 #ifdef SFX_MPI
629  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
630 #endif
631  !
632 ENDIF
633 !
634 kresp = nworkb
635 !
636 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFL1_ASC',1,zhook_handle)
637 !
638 END SUBROUTINE write_surfl1_asc
639 !
640 ! #############################################################
641  SUBROUTINE write_surft0_asc (&
642  hrec,kyear,kmonth,kday,ptime,kresp,hcomment)
643 ! #############################################################
644 !
645 !!**** * - routine to write a date
646 !
647 !
648 !
649 !
650 USE modd_surfex_omp, ONLY : lwork0
651 !
652 USE modd_io_surf_asc, ONLY : nunit, cmask
653 !
654 USE modi_io_buff
655 USE modi_error_write_surf_asc
656 !
657 USE yomhook ,ONLY : lhook, dr_hook
658 USE parkind1 ,ONLY : jprb
659 !
660 IMPLICIT NONE
661 !
662 !* 0.1 Declarations of arguments
663 !
664 !
665 !
666  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
667 INTEGER, INTENT(IN) :: kyear ! year
668 INTEGER, INTENT(IN) :: kmonth ! month
669 INTEGER, INTENT(IN) :: kday ! day
670 REAL, INTENT(IN) :: ptime ! time
671 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
672  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
673 
674 !* 0.2 Declarations of local variables
675 !
676 INTEGER, DIMENSION(3) :: itdate
677 REAL(KIND=JPRB) :: zhook_handle
678 !
679 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',0,zhook_handle)
680 !
681 kresp=0
682 !
683  CALL io_buff(&
684  hrec,'W',lwork0)
685 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,zhook_handle)
686 IF (lwork0) RETURN
687 !
688 itdate(1) = kyear
689 itdate(2) = kmonth
690 itdate(3) = kday
691 !
692 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//trim(hrec)//'%TDATE'
693 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
694 WRITE(nunit,fmt=*,err=100) itdate(:)
695 !
696 WRITE(nunit,fmt=*,err=100) '&'//cmask//' '//trim(hrec)//'%TIME'
697 WRITE(nunit,fmt='(A50)',err=100) hcomment(1:50)
698 WRITE(nunit,fmt=*,err=100) ptime
699 !
700 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,zhook_handle)
701 RETURN
702 !
703 100 CONTINUE
704  CALL error_write_surf_asc(hrec,kresp)
705 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT0_ASC',1,zhook_handle)
706 !
707 END SUBROUTINE write_surft0_asc
708 !
709 ! #############################################################
710  SUBROUTINE write_surft1_asc (&
711  hrec,kyear,kmonth,kday,ptime,kresp,hcomment)
712 ! #############################################################
713 !
714 !!**** * - routine to write a date
715 !
716 !
717 !
718 !
719 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write
720 !
721 USE modd_surfex_omp, ONLY : lwork0, nworkb
722 !
723 USE modd_io_surf_asc, ONLY : nunit, cmask
724 !
725 USE modi_io_buff
726 USE modi_error_write_surf_asc
727 !
728 USE yomhook ,ONLY : lhook, dr_hook
729 USE parkind1 ,ONLY : jprb
730 !
731 IMPLICIT NONE
732 !
733 #ifdef SFX_MPI
734 include "mpif.h"
735 #endif
736 !
737 !* 0.1 Declarations of arguments
738 !
739 !
740 !
741  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
742 INTEGER, DIMENSION(:), INTENT(IN) :: kyear ! year
743 INTEGER, DIMENSION(:), INTENT(IN) :: kmonth ! month
744 INTEGER, DIMENSION(:), INTENT(IN) :: kday ! day
745 REAL, DIMENSION(:), INTENT(IN) :: ptime ! time
746 INTEGER, INTENT(OUT):: kresp ! KRESP : return-code if a problem appears
747  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
748 
749 !* 0.2 Declarations of local variables
750 !
751 INTEGER, DIMENSION(3,SIZE(KYEAR)) :: itdate
752 REAL :: xtime0
753 REAL(KIND=JPRB) :: zhook_handle
754 !
755 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',0,zhook_handle)
756 !
757 !$OMP SINGLE
758 !
759 nworkb = 0
760 !
761  CALL io_buff(&
762  hrec,'W',lwork0)
763 !
764 !$OMP END SINGLE
765 !
766 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',1,zhook_handle)
767 IF (lwork0) RETURN
768 !
769 IF (nrank==npio) THEN
770  !
771 #ifdef SFX_MPI
772  xtime0 = mpi_wtime()
773 #endif
774  !
775 !$OMP SINGLE
776  !
777  itdate(1,:) = kyear(:)
778  itdate(2,:) = kmonth(:)
779  itdate(3,:) = kday(:)
780  !
781  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//trim(hrec)//'%TDATE'
782  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
783  WRITE(nunit,fmt=*,iostat=nworkb) itdate(:,:)
784  !
785  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//trim(hrec)//'%TIME'
786  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
787  WRITE(nunit,fmt=*,iostat=nworkb) ptime
788  !
789 !$OMP END SINGLE
790  !
791  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
792  !
793 #ifdef SFX_MPI
794  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
795 #endif
796  !
797 ENDIF
798 !
799 kresp = nworkb
800 !
801 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT1_ASC',1,zhook_handle)
802 !
803 END SUBROUTINE write_surft1_asc
804 !
805 ! #############################################################
806  SUBROUTINE write_surft2_asc (&
807  hrec,kyear,kmonth,kday,ptime,kresp,hcomment)
808 ! #############################################################
809 !
810 !!**** * - routine to write a date
811 !
812 !
813 !
814 !
815 USE modd_surfex_mpi, ONLY : nrank, npio, xtime_npio_write
816 !
817 USE modd_surfex_omp, ONLY : lwork0, nworkb
818 !
819 USE modd_io_surf_asc, ONLY : nunit, cmask
820 !
821 USE modi_io_buff
822 USE modi_error_write_surf_asc
823 !
824 USE yomhook ,ONLY : lhook, dr_hook
825 USE parkind1 ,ONLY : jprb
826 !
827 IMPLICIT NONE
828 !
829 #ifdef SFX_MPI
830 include "mpif.h"
831 #endif
832 !
833 !* 0.1 Declarations of arguments
834 !
835 !
836 !
837  CHARACTER(LEN=12), INTENT(IN) :: hrec ! name of the article to be read
838 INTEGER, DIMENSION(:,:), INTENT(IN) :: kyear ! year
839 INTEGER, DIMENSION(:,:), INTENT(IN) :: kmonth ! month
840 INTEGER, DIMENSION(:,:), INTENT(IN) :: kday ! day
841 REAL, DIMENSION(:,:), INTENT(IN) :: ptime ! time
842 INTEGER, INTENT(OUT) :: kresp ! KRESP : return-code if a problem appears
843  CHARACTER(LEN=100), INTENT(IN) :: hcomment ! comment string
844 
845 !* 0.2 Declarations of local variables
846 !
847 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: itdate
848 REAL :: xtime0
849 REAL(KIND=JPRB) :: zhook_handle
850 !
851 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',0,zhook_handle)
852 !
853 !$OMP SINGLE
854 nworkb = 0
855 !
856  CALL io_buff(&
857  hrec,'W',lwork0)
858 !$OMP END SINGLE
859 !
860 IF (lwork0 .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',1,zhook_handle)
861 IF (lwork0) RETURN
862 !
863 IF (nrank==npio) THEN
864  !
865 #ifdef SFX_MPI
866  xtime0 = mpi_wtime()
867 #endif
868  !
869 !$OMP SINGLE
870  !
871  itdate(1,:,:) = kyear(:,:)
872  itdate(2,:,:) = kmonth(:,:)
873  itdate(3,:,:) = kday(:,:)
874  !
875  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//trim(hrec)//'%TDATE'
876  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
877  WRITE(nunit,fmt=*,iostat=nworkb) itdate(:,:,:)
878  !
879  WRITE(nunit,fmt=*,iostat=nworkb) '&'//cmask//' '//trim(hrec)//'%TIME'
880  WRITE(nunit,fmt='(A50)',iostat=nworkb) hcomment(1:50)
881  WRITE(nunit,fmt=*,iostat=nworkb) ptime
882  !
883 !$OMP END SINGLE
884  !
885  IF (nworkb/=0) CALL error_write_surf_asc(hrec,nworkb)
886  !
887 #ifdef SFX_MPI
888  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
889 #endif
890  !
891 ENDIF
892 !
893 kresp = nworkb
894 !
895 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_ASC:WRITE_SURFT2_ASC',1,zhook_handle)
896 !
897 END SUBROUTINE write_surft2_asc
898 !
899 END MODULE mode_write_surf_asc
subroutine write_surfl1_asc(HREC, OFIELD, KRESP, HCOMMENT, HDIR)
subroutine write_surfl0_asc(HREC, OFIELD, KRESP, HCOMMENT)
subroutine write_surft2_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine write_surfx2_asc(HREC, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine write_surft0_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine write_surft1_asc(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
subroutine write_surfx1_asc(HREC, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine write_surfx0_asc(HREC, PFIELD, KRESP, HCOMMENT)
subroutine write_surfn0_asc(HREC, KFIELD, KRESP, HCOMMENT)
subroutine io_buff(HREC, HACTION, OKNOWN)
Definition: io_buff.F90:6
subroutine write_surfn1_asc(HREC, KFIELD, KRESP, HCOMMENT, HDIR)
subroutine write_surfc0_asc(HREC, HFIELD, KRESP, HCOMMENT)
subroutine error_write_surf_asc(HREC, KRESP)