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