1 !SURFEX_LIC Copyright 1994-2014 Meteo-France
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 MODULE MODE_WRITE_SURF_FA
7 INTERFACE WRITE_SURF0_FA
8 MODULE PROCEDURE WRITE_SURFX0_FA
9 MODULE PROCEDURE WRITE_SURFN0_FA
10 MODULE PROCEDURE WRITE_SURFL0_FA
11 MODULE PROCEDURE WRITE_SURFC0_FA
13 INTERFACE WRITE_SURFN_FA
14 MODULE PROCEDURE WRITE_SURFX1_FA
15 MODULE PROCEDURE WRITE_SURFN1_FA
16 MODULE PROCEDURE WRITE_SURFL1_FA
17 MODULE PROCEDURE WRITE_SURFX2_FA
19 INTERFACE WRITE_SURFT_FA
20 MODULE PROCEDURE WRITE_SURFT0_FA
21 MODULE PROCEDURE WRITE_SURFT2_FA
26 ! #############################################################
27 SUBROUTINE WRITE_SURFX0_FA(HREC,PFIELD,KRESP,HCOMMENT)
28 ! #############################################################
30 !!**** * - routine to write a real scalar
32 USE MODD_SURFEX_OMP, ONLY : LWORK0
34 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, CMASK, LFANOCOMPACT
39 USE MODI_ERROR_WRITE_SURF_FA
41 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
42 USE PARKIND1 ,ONLY : JPRB
46 !* 0.1 Declarations of arguments
48 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
49 REAL, INTENT(IN) :: PFIELD ! the real scalar to be read
50 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
51 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
53 !* 0.2 Declarations of local variables
55 CHARACTER(LEN=18):: YNAME ! Field Name
56 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
57 REAL(KIND=JPRB) :: ZHOOK_HANDLE
59 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:ERROR_WRITE_SURF_FA:WRITE_SURFX0_FA',0,ZHOOK_HANDLE)
63 CALL IO_BUFF_n(HREC,'W',LWORK0)
64 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX0_FA',1,ZHOOK_HANDLE)
68 CALL FAVEUR(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
69 ! -- Pour ecrire sans compactage
70 CALL FAGOTE(KRESP,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
73 YNAME=TRIM(CMASK)//TRIM(HREC)
74 CALL FAECR_R(KRESP,NUNIT_FA,YNAME,PFIELD)
76 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
80 ! On remet la valeur par defaut
81 CALL FAGOTE(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
84 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX0_FA',1,ZHOOK_HANDLE)
86 END SUBROUTINE WRITE_SURFX0_FA
88 ! #############################################################
89 SUBROUTINE WRITE_SURFN0_FA(HREC,KFIELD,KRESP,HCOMMENT)
90 ! #############################################################
92 !!**** * - routine to write an integer
94 USE MODD_SURFEX_OMP, ONLY : LWORK0
96 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, NMASK, CMASK, LFANOCOMPACT
101 USE MODI_ERROR_WRITE_SURF_FA
103 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
104 USE PARKIND1 ,ONLY : JPRB
108 !* 0.1 Declarations of arguments
110 CHARACTER(LEN=LEN_HREC), 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
115 !* 0.2 Declarations of local variables
117 CHARACTER(LEN=18):: YNAME ! Field Name
118 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
119 REAL(KIND=JPRB) :: ZHOOK_HANDLE
121 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',0,ZHOOK_HANDLE)
125 CALL IO_BUFF_n(HREC,'W',LWORK0)
126 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',1,ZHOOK_HANDLE)
130 CALL FAVEUR(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
131 ! -- Pour ecrire sans compactage
132 CALL FAGOTE(KRESP,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
135 YNAME=TRIM(CMASK)//TRIM(HREC)
136 CALL FAECR_I(KRESP,NUNIT_FA,YNAME,KFIELD)
138 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
142 ! On remet la valeur par defaut
143 CALL FAGOTE(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
146 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',1,ZHOOK_HANDLE)
148 END SUBROUTINE WRITE_SURFN0_FA
150 ! #############################################################
151 SUBROUTINE WRITE_SURFL0_FA(HREC,OFIELD,KRESP,HCOMMENT)
152 ! #############################################################
154 !!**** * - routine to write a logical
156 USE MODD_SURFEX_OMP, ONLY : LWORK0
158 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, CMASK, LFANOCOMPACT
163 USE MODI_ERROR_WRITE_SURF_FA
165 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
166 USE PARKIND1 ,ONLY : JPRB
170 !* 0.1 Declarations of arguments
172 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
173 LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field
174 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
175 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
177 !* 0.2 Declarations of local variables
179 CHARACTER(LEN=18):: YNAME ! Field Name
180 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
181 REAL(KIND=JPRB) :: ZHOOK_HANDLE
183 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',0,ZHOOK_HANDLE)
187 CALL IO_BUFF_n(HREC,'W',LWORK0)
188 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',1,ZHOOK_HANDLE)
192 CALL FAVEUR(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
193 ! -- Pour ecrire sans compactage
194 CALL FAGOTE(KRESP,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
197 YNAME=TRIM(CMASK)//TRIM(HREC)
198 CALL FAECR_L(KRESP,NUNIT_FA,YNAME,OFIELD)
200 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
204 ! On remet la valeur par defaut
205 CALL FAGOTE(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
208 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',1,ZHOOK_HANDLE)
210 END SUBROUTINE WRITE_SURFL0_FA
212 ! #############################################################
213 SUBROUTINE WRITE_SURFC0_FA(HREC,HFIELD,KRESP,HCOMMENT)
214 ! #############################################################
216 !!**** * - routine to write a character
218 USE MODD_SURFEX_OMP, ONLY : LWORK0
220 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, CMASK, LFANOCOMPACT
225 USE MODI_ERROR_WRITE_SURF_FA
227 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
228 USE PARKIND1 ,ONLY : JPRB
232 !* 0.1 Declarations of arguments
234 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
235 CHARACTER(LEN=40), INTENT(IN) :: HFIELD ! the integer to be read
236 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
237 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
239 !* 0.2 Declarations of local variables
241 CHARACTER,DIMENSION(40) :: YFIELD
242 CHARACTER(LEN=18) :: YNAME ! Field Name
243 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
244 REAL(KIND=JPRB) :: ZHOOK_HANDLE
246 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',0,ZHOOK_HANDLE)
250 CALL IO_BUFF_n(HREC,'W',LWORK0)
251 IF (LWORK0.AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',1,ZHOOK_HANDLE)
255 CALL FAVEUR(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
256 ! -- Pour ecrire sans compactage
257 CALL FAGOTE(KRESP,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
260 READ(HFIELD,'(40A1)') YFIELD
261 YNAME=TRIM(CMASK)//TRIM(HREC)
262 CALL FAECR_C(KRESP,NUNIT_FA,YNAME,40,YFIELD)
264 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
268 ! On remet la valeur par defaut
269 CALL FAGOTE(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
272 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',1,ZHOOK_HANDLE)
274 END SUBROUTINE WRITE_SURFC0_FA
276 ! #############################################################
277 SUBROUTINE WRITE_SURFX1_FA(HREC,KL,PFIELD,KRESP,HCOMMENT,HDIR)
278 ! #############################################################
280 !!**** * - routine to fill a write 1D array for the externalised surface
282 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE, WLOG_MPI
284 USE MODD_SURFEX_OMP, ONLY : LWORK0, NWORKB
286 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, NMASK, NFULL, CMASK, &
288 USE MODD_SURF_PAR, ONLY : XUNDEF
291 USE MODI_ERROR_WRITE_SURF_FA
292 USE MODI_GATHER_AND_WRITE_MPI
294 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
295 USE PARKIND1 ,ONLY : JPRB
303 !* 0.1 Declarations of arguments
305 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
306 INTEGER, INTENT(IN) :: KL ! number of points
307 REAL, DIMENSION(KL), INTENT(IN) :: PFIELD ! array containing the data field
308 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
309 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
310 CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
312 ! horizontal spatial dim.
313 ! '-' : no horizontal dim.
314 !* 0.2 Declarations of local variables
316 INTEGER :: I,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
317 REAL :: ZMEAN, ZCOUNT
319 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD))) :: ZWORK ! work array read in the file
320 REAL(KIND=JPRB) :: ZHOOK_HANDLE
322 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',0,ZHOOK_HANDLE)
327 CALL IO_BUFF_n(HREC,'W',LWORK0)
330 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',1,ZHOOK_HANDLE)
334 CALL GATHER_AND_WRITE_MPI(PFIELD,ZWORK,NMASK)
335 ELSE !no horizontal dim. case (not masked)
336 ZWORK(1:KL)=PFIELD(1:KL)
337 ZWORK(KL+1:NFULL)=SUM(PFIELD(1:KL))/REAL(KL)
340 IF (NRANK==NPIO) THEN
349 CALL FAVEUR(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
350 ! -- Pour ecrire sans compactage
351 CALL FAGOTE(NWORKB,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
352 CALL FAIENC(NWORKB,NUNIT_FA,'S1D_',0,HREC,ZWORK,.FALSE.)
353 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
354 ! On remet la valeur par defaut
355 CALL FAGOTE(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
360 IF(ZWORK(I)/=XUNDEF)THEN
361 ZMEAN =ZMEAN+ZWORK(I)
365 IF (ZCOUNT.GT.0.0) ZMEAN=ZMEAN/ZCOUNT
366 WHERE(ZWORK(:)==XUNDEF)ZWORK(:)=ZMEAN
367 CALL FAIENC(NWORKB,NUNIT_FA,'S1D_',0,HREC,ZWORK,.FALSE.)
368 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
374 XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
381 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',1,ZHOOK_HANDLE)
383 END SUBROUTINE WRITE_SURFX1_FA
385 ! #############################################################
386 SUBROUTINE WRITE_SURFX2_FA(HREC,KL1,KL2,PFIELD,KRESP,HCOMMENT,HDIR)
387 ! #############################################################
389 !!**** * - routine to fill a write 2D array for the externalised surface
391 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
393 USE MODD_SURFEX_OMP, ONLY : LWORK0, NWORKB
395 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, NMASK, NFULL, &
397 USE MODD_SURF_PAR, ONLY : XUNDEF
400 USE MODI_ERROR_WRITE_SURF_FA
401 USE MODI_GATHER_AND_WRITE_MPI
403 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
404 USE PARKIND1 ,ONLY : JPRB
412 !* 0.1 Declarations of arguments
414 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
415 INTEGER, INTENT(IN) :: KL1 ! number of points
416 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
417 REAL, DIMENSION(KL1,KL2), INTENT(IN) :: PFIELD ! array containing the data field
418 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
419 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
420 CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
422 ! horizontal spatial dim.
423 ! '-' : no horizontal dim.
424 !* 0.2 Declarations of local variables
426 CHARACTER(LEN=4) :: YSUFFIX
427 CHARACTER(LEN=2) :: YPATCH
428 INTEGER :: I, JL ! loop counter
429 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
431 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD,1)),SIZE(PFIELD,2)) :: ZWORK ! work array read in the file
432 REAL, DIMENSION(SIZE(PFIELD,2)) :: ZMEAN, ZCOUNT
433 REAL(KIND=JPRB) :: ZHOOK_HANDLE
435 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',0,ZHOOK_HANDLE)
440 CALL IO_BUFF_n(HREC,'W',LWORK0)
443 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',1,ZHOOK_HANDLE)
446 CALL GATHER_AND_WRITE_MPI(PFIELD,ZWORK,NMASK)
448 IF (NRANK==NPIO) THEN
457 CALL FAVEUR(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
458 ! -- Pour ecrire sans compactage
459 CALL FAGOTE(NWORKB,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
460 DO JL=1,SIZE(ZWORK,2)
461 WRITE(YPATCH,'(I2.2)')JL
462 YSUFFIX='S'//YPATCH//'_'
463 CALL FAIENC(NWORKB,NUNIT_FA,YSUFFIX,0,HREC,ZWORK(:,JL),.FALSE.)
464 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
466 ! On remet la valeur par defaut
467 CALL FAGOTE(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
472 DO JL=1,SIZE(ZWORK,2)
473 IF(ZWORK(I,JL)/=XUNDEF) THEN
474 ZMEAN (JL)=ZMEAN(JL)+ZWORK(I,JL)
475 ZCOUNT(JL)=ZCOUNT(JL)+1.0
479 WHERE(ZCOUNT(:)>0.0)ZMEAN(:)=ZMEAN(:)/ZCOUNT(:)
480 DO JL=1,SIZE(ZWORK,2)
481 WHERE(ZWORK(:,JL)==XUNDEF)ZWORK(:,JL)=ZMEAN(JL)
482 WRITE(YPATCH,'(I2.2)')JL
483 YSUFFIX='S'//YPATCH//'_'
484 CALL FAIENC(NWORKB,NUNIT_FA,YSUFFIX,0,HREC,ZWORK(:,JL),.FALSE.)
485 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
492 XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
499 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',1,ZHOOK_HANDLE)
501 END SUBROUTINE WRITE_SURFX2_FA
503 ! #############################################################
504 SUBROUTINE WRITE_SURFN1_FA(HREC,KL,KFIELD,KRESP,HCOMMENT,HDIR)
505 ! #############################################################
507 !!**** * - routine to write an integer array
509 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
511 USE MODD_SURFEX_OMP, ONLY : LWORK0, NWORKB
513 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, NMASK, NFULL, CMASK, LFANOCOMPACT
518 USE MODI_ERROR_WRITE_SURF_FA
519 USE MODI_GATHER_AND_WRITE_MPI
521 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
522 USE PARKIND1 ,ONLY : JPRB
530 !* 0.1 Declarations of arguments
532 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
533 INTEGER, INTENT(IN) :: KL ! number of points
534 INTEGER, DIMENSION(KL), INTENT(IN) :: KFIELD ! array containing the data field
535 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
536 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
537 CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
539 ! horizontal spatial dim.
540 ! '-' : no horizontal dim.
541 !* 0.2 Declarations of local variables
543 CHARACTER(LEN=18) :: YNAME! Field Nam
544 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
545 INTEGER, DIMENSION(MAX(NFULL,SIZE(KFIELD))) :: IWORK ! work array read in the file
547 REAL(KIND=JPRB) :: ZHOOK_HANDLE
549 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',0,ZHOOK_HANDLE)
554 CALL IO_BUFF_n(HREC,'W',LWORK0)
557 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',1,ZHOOK_HANDLE)
560 IF (HDIR/='H' .OR. HREC=="-") THEN
563 CALL GATHER_AND_WRITE_MPI(KFIELD,IWORK,NMASK)
566 IF (NRANK==NPIO) THEN
575 CALL FAVEUR(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
576 ! -- Pour ecrire sans compactage
577 CALL FAGOTE(NWORKB,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
580 YNAME=TRIM(CMASK)//TRIM(HREC)
582 CALL FAECR_I_D(NWORKB,NUNIT_FA,YNAME,KL,IWORK(1:KL))
583 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
586 ! On remet la valeur par defaut
587 CALL FAGOTE(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
593 XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
600 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',1,ZHOOK_HANDLE)
603 END SUBROUTINE WRITE_SURFN1_FA
605 ! #############################################################
606 SUBROUTINE WRITE_SURFL1_FA(HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR)
607 ! #############################################################
609 !!**** * - routine to write a logical array
611 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
613 USE MODD_SURFEX_OMP, ONLY : LWORK0, NWORKB
615 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, CMASK, LFANOCOMPACT
620 USE MODI_ERROR_WRITE_SURF_FA
622 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
623 USE PARKIND1 ,ONLY : JPRB
631 !* 0.1 Declarations of arguments
633 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
634 INTEGER, INTENT(IN) :: KL ! number of points
635 LOGICAL, DIMENSION(KL), INTENT(IN) :: OFIELD ! array containing the data field
636 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
637 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
638 CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
640 ! horizontal spatial dim.
641 ! '-' : no horizontal dim.
642 !* 0.2 Declarations of local variables
644 CHARACTER(LEN=18):: YNAME ! Field Name
645 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
647 REAL(KIND=JPRB) :: ZHOOK_HANDLE
649 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',0,ZHOOK_HANDLE)
654 CALL IO_BUFF_n(HREC,'W',LWORK0)
657 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',1,ZHOOK_HANDLE)
660 IF (NRANK==NPIO) THEN
669 CALL FAVEUR(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
670 ! -- Pour ecrire sans compactage
671 CALL FAGOTE(NWORKB,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
674 YNAME=TRIM(CMASK)//TRIM(HREC)
675 CALL FAECR_L_D(NWORKB,NUNIT_FA,YNAME,KL,OFIELD)
676 IF (NWORKB/=0) CALL ERROR_WRITE_SURF_FA(HREC,NWORKB)
679 ! On remet la valeur par defaut
680 CALL FAGOTE(NWORKB,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
686 XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
693 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',1,ZHOOK_HANDLE)
695 END SUBROUTINE WRITE_SURFL1_FA
697 ! #############################################################
698 SUBROUTINE WRITE_SURFT0_FA(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
699 ! #############################################################
701 !!**** * - routine to write a date
703 USE MODD_SURFEX_OMP, ONLY : LWORK0
705 USE MODD_IO_SURF_FA, ONLY : CMASK, NUNIT_FA, LFANOCOMPACT
710 USE MODI_ERROR_WRITE_SURF_FA
712 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
713 USE PARKIND1 ,ONLY : JPRB
717 !* 0.1 Declarations of arguments
719 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
720 INTEGER, INTENT(IN) :: KYEAR ! year
721 INTEGER, INTENT(IN) :: KMONTH ! month
722 INTEGER, INTENT(IN) :: KDAY ! day
723 REAL, INTENT(IN) :: PTIME ! time
724 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
725 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
727 !* 0.2 Declarations of local variables
729 CHARACTER(LEN=18) :: YNAME ! Field Name
731 INTEGER :: IHOUR, IMIN, ISEC
732 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
733 INTEGER, DIMENSION(3) :: ITDATE
734 REAL(KIND=JPRB) :: ZHOOK_HANDLE
736 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',0,ZHOOK_HANDLE)
740 IF (HREC=='DTCUR') THEN
742 IHOUR = FLOOR(PTIME)/3600
743 IMIN = FLOOR(PTIME)/60 - IHOUR * 60
744 ISEC = NINT(PTIME) - IHOUR * 3600 - IMIN * 60
745 CALL FANDAR(IRET,NUNIT_FA,(/ KYEAR, KMONTH, KDAY, IHOUR, IMIN, ISEC, 0, 0, 0, 0, 0 /))
749 CALL IO_BUFF_n(HREC,'W',LWORK0)
750 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',1,ZHOOK_HANDLE)
760 CALL FAVEUR(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
761 ! -- Pour ecrire sans compactage
762 CALL FAGOTE(KRESP,NUNIT_FA,-1,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
765 YNAME=TRIM(CMASK)//TRIM(HREC)//'%TDATE'
766 CALL FAECR_I_D(KRESP,NUNIT_FA,YNAME,3,ITDATE)
768 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
771 YNAME=TRIM(CMASK)//TRIM(HREC)//'%TIME'
772 CALL FAECR_R(KRESP,NUNIT_FA,YNAME,PTIME)
774 CALL ERROR_WRITE_SURF_FA(HREC,KRESP)
778 ! On remet la valeur par defaut
779 CALL FAGOTE(KRESP,NUNIT_FA,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL)
782 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',1,ZHOOK_HANDLE)
784 END SUBROUTINE WRITE_SURFT0_FA
786 ! #############################################################
787 SUBROUTINE WRITE_SURFT2_FA(HREC,KL1,KL2,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
788 ! #############################################################
790 !!**** * - routine to write a date
792 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, XTIME_NPIO_WRITE
794 USE MODD_SURFEX_OMP, ONLY : LWORK0, NWORKB
796 USE MODD_IO_SURF_FA, ONLY : NUNIT_FA, CMASK, NLUOUT
802 USE MODI_ERROR_WRITE_SURF_FA
804 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
805 USE PARKIND1 ,ONLY : JPRB
813 !* 0.1 Declarations of arguments
815 CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read
816 INTEGER, INTENT(IN) :: KL1 ! number of points
817 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
818 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KYEAR ! year
819 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KMONTH ! month
820 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KDAY ! day
821 REAL, DIMENSION(KL1,KL2), INTENT(IN) :: PTIME ! time
822 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
823 CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
825 !* 0.2 Declarations of local variables
827 CHARACTER(LEN=18):: YNAME ! Field Name
828 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
830 REAL(KIND=JPRB) :: ZHOOK_HANDLE
832 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',0,ZHOOK_HANDLE)
837 CALL IO_BUFF_n(HREC,'W',LWORK0)
840 IF (LWORK0 .AND. LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',1,ZHOOK_HANDLE)
843 IF (NRANK==NPIO) THEN
851 ITDATE(1,:,:) = KYEAR (:,:)
852 ITDATE(2,:,:) = KMONTH (:,:)
853 ITDATE(3,:,:) = KDAY (:,:)
857 YNAME=TRIM(CMASK)//TRIM(HREC)
858 WRITE(NLUOUT,*) ' WRITE_SURFT2_FA : time in 2 dimensions not yet implemented : YNAME=',YNAME,'ITDATE=',ITDATE
859 CALL ABOR1_SFX('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA: time in 2 dimensions not yet implemented')
862 XTIME_NPIO_WRITE = XTIME_NPIO_WRITE + (MPI_WTIME() - XTIME0)
867 IF (LHOOK) CALL DR_HOOK('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',1,ZHOOK_HANDLE)
869 END SUBROUTINE WRITE_SURFT2_FA
871 END MODULE MODE_WRITE_SURF_FA