SURFEX v8.1
General documentation of Surfex
mode_write_surf_fa.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_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
12 END INTERFACE
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
18  MODULE PROCEDURE write_surfx3_fa
19 END INTERFACE
20 INTERFACE write_surft_fa
21  MODULE PROCEDURE write_surft0_fa
22  MODULE PROCEDURE write_surft2_fa
23 END INTERFACE
24 !
25 CONTAINS
26 !
27 ! #############################################################
28  SUBROUTINE write_surfx0_fa (&
29  HREC,PFIELD,KRESP,HCOMMENT)
30 ! #############################################################
31 !
32 !!**** * - routine to write a real scalar
33 !
34 !
36 !
37 USE mode_fasurfex
38 !
39 USE modi_io_buff
40 USE modi_error_write_surf_fa
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 !
47 !* 0.1 Declarations of arguments
48 !
49 !
50 !
51  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
52 REAL, INTENT(IN) :: PFIELD ! the real scalar to be read
53 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
54  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
55 !
56 !* 0.2 Declarations of local variables
57 !
58 LOGICAL :: GFOUND
59  CHARACTER(LEN=18):: YNAME ! Field Name
60 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
61 REAL(KIND=JPRB) :: ZHOOK_HANDLE
62 !
63 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:ERROR_WRITE_SURF_FA:WRITE_SURFX0_FA',0,zhook_handle)
64 !
65 kresp=0
66 !
67  CALL io_buff(&
68  hrec,'W',gfound)
69 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX0_FA',1,zhook_handle)
70 IF (gfound) RETURN
71 !
72 IF(lfanocompact)THEN
73  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
74  ! -- Pour ecrire sans compactage
75  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
76 ENDIF
77 !
78 yname=trim(cprefix1d)//trim(hrec)
79  CALL faecr_r(kresp,nunit_fa,yname,pfield)
80 IF (kresp/=0) THEN
81  CALL error_write_surf_fa(hrec,kresp)
82 ENDIF
83 !
84 IF(lfanocompact)THEN
85  ! On remet la valeur par defaut
86  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
87 ENDIF
88 !
89 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX0_FA',1,zhook_handle)
90 !
91 END SUBROUTINE write_surfx0_fa
92 !
93 ! #############################################################
94  SUBROUTINE write_surfn0_fa (&
95  HREC,KFIELD,KRESP,HCOMMENT)
96 ! #############################################################
97 !
98 !!**** * - routine to write an integer
99 !
101 !
102 USE mode_fasurfex
103 !
104 USE modi_io_buff
105 USE modi_error_write_surf_fa
106 !
107 USE yomhook ,ONLY : lhook, dr_hook
108 USE parkind1 ,ONLY : jprb
109 !
110 IMPLICIT NONE
111 !
112 !* 0.1 Declarations of arguments
113 !
114 !
115 !
116  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
117 INTEGER, INTENT(IN) :: KFIELD ! the integer to be read
118 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
119  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
120 !
121 !* 0.2 Declarations of local variables
122 !
123 LOGICAL :: GFOUND
124  CHARACTER(LEN=18):: YNAME ! Field Name
125 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
126 REAL(KIND=JPRB) :: ZHOOK_HANDLE
127 !
128 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',0,zhook_handle)
129 !
130 kresp=0
131 !
132  CALL io_buff(&
133  hrec,'W',gfound)
134 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',1,zhook_handle)
135 IF (gfound) RETURN
136 !
137 IF(lfanocompact)THEN
138  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
139  ! -- Pour ecrire sans compactage
140  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
141 ENDIF
142 !
143 yname=trim(cprefix1d)//trim(hrec)
144  CALL faecr_i(kresp,nunit_fa,yname,kfield)
145 IF (kresp/=0) THEN
146  CALL error_write_surf_fa(hrec,kresp)
147 ENDIF
148 !
149 IF(lfanocompact)THEN
150  ! On remet la valeur par defaut
151  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
152 ENDIF
153 !
154 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN0_FA',1,zhook_handle)
155 !
156 END SUBROUTINE write_surfn0_fa
157 !
158 ! #############################################################
159  SUBROUTINE write_surfl0_fa (&
160  HREC,OFIELD,KRESP,HCOMMENT)
161 ! #############################################################
162 !
163 !!**** * - routine to write a logical
164 !
166 !
167 USE mode_fasurfex
168 !
169 USE modi_io_buff
170 USE modi_error_write_surf_fa
171 !
172 USE yomhook ,ONLY : lhook, dr_hook
173 USE parkind1 ,ONLY : jprb
174 !
175 IMPLICIT NONE
176 !
177 !* 0.1 Declarations of arguments
178 !
179 !
180 !
181  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
182 LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field
183 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
184  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
185 !
186 !* 0.2 Declarations of local variables
187 !
188 LOGICAL :: GFOUND
189  CHARACTER(LEN=18):: YNAME ! Field Name
190 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
191 REAL(KIND=JPRB) :: ZHOOK_HANDLE
192 !
193 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',0,zhook_handle)
194 !
195 kresp=0
196 !
197  CALL io_buff(&
198  hrec,'W',gfound)
199 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',1,zhook_handle)
200 IF (gfound) RETURN
201 !
202 IF(lfanocompact)THEN
203  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
204  ! -- Pour ecrire sans compactage
205  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
206 ENDIF
207 !
208 yname=trim(cprefix1d)//trim(hrec)
209  CALL faecr_l(kresp,nunit_fa,yname,ofield)
210 IF (kresp/=0) THEN
211  CALL error_write_surf_fa(hrec,kresp)
212 ENDIF
213 !
214 IF(lfanocompact)THEN
215  ! On remet la valeur par defaut
216  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
217 ENDIF
218 !
219 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL0_FA',1,zhook_handle)
220 !
221 END SUBROUTINE write_surfl0_fa
222 !
223 ! #############################################################
224  SUBROUTINE write_surfc0_fa (&
225  HREC,HFIELD,KRESP,HCOMMENT)
226 ! #############################################################
227 !
228 !!**** * - routine to write a character
229 !
230 !
232 !
233 USE mode_fasurfex
234 !
235 USE modi_io_buff
236 USE modi_error_write_surf_fa
237 !
238 USE yomhook ,ONLY : lhook, dr_hook
239 USE parkind1 ,ONLY : jprb
240 !
241 IMPLICIT NONE
242 !
243 !* 0.1 Declarations of arguments
244 !
245 !
246 !
247  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
248  CHARACTER(LEN=40), INTENT(IN) :: HFIELD ! the integer to be read
249 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
250  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
251 !
252 !* 0.2 Declarations of local variables
253 !
254 LOGICAL :: GFOUND
255  CHARACTER,DIMENSION(40) :: YFIELD
256  CHARACTER(LEN=18) :: YNAME ! Field Name
257 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
258 REAL(KIND=JPRB) :: ZHOOK_HANDLE
259 !
260 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',0,zhook_handle)
261 !
262 kresp=0
263 !
264  CALL io_buff(&
265  hrec,'W',gfound)
266 IF (gfound.AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',1,zhook_handle)
267 IF (gfound) RETURN
268 !
269 IF(lfanocompact)THEN
270  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
271  ! -- Pour ecrire sans compactage
272  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
273 ENDIF
274 !
275 READ(hfield,'(40A1)') yfield
276 yname=trim(cprefix1d)//trim(hrec)
277  CALL faecr_c(kresp,nunit_fa,yname,40,yfield)
278 IF (kresp/=0) THEN
279  CALL error_write_surf_fa(hrec,kresp)
280 ENDIF
281 !
282 IF(lfanocompact)THEN
283  ! On remet la valeur par defaut
284  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
285 ENDIF
286 !
287 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFC0_FA',1,zhook_handle)
288 !
289 END SUBROUTINE write_surfc0_fa
290 !
291 ! #############################################################
292  SUBROUTINE write_surfx1_fa (&
293  HREC,KL,PFIELD,KRESP,HCOMMENT,HDIR)
294 ! #############################################################
295 !
296 !!**** * - routine to fill a write 1D array for the externalised surface
297 !
298 !
299 !
300 !
302 !
303 USE modd_io_surf_fa, ONLY : nunit_fa, nmask, nfull, cprefix1d, &
304  lfanocompact
305 USE modd_surf_par, ONLY : xundef
306 !
307 USE modi_io_buff
308 USE modi_error_write_surf_fa
310 !
311 USE yomhook ,ONLY : lhook, dr_hook
312 USE parkind1 ,ONLY : jprb
313 !
314 IMPLICIT NONE
315 !
316 #ifdef SFX_MPI
317 include "mpif.h"
318 #endif
319 !
320 !* 0.1 Declarations of arguments
321 !
322 !
323 !
324  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
325 INTEGER, INTENT(IN) :: KL ! number of points
326 REAL, DIMENSION(KL), INTENT(IN) :: PFIELD ! array containing the data field
327 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
328  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
329  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
330  ! 'H' : field with
331  ! horizontal spatial dim.
332  ! '-' : no horizontal dim.
333 !* 0.2 Declarations of local variables
334 !
335 LOGICAL :: GFOUND
336 INTEGER :: I,INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
337 REAL :: ZMEAN, ZCOUNT
338 REAL :: XTIME0
339 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD))) :: ZWORK ! work array read in the file
340 REAL(KIND=JPRB) :: ZHOOK_HANDLE
341 !
342 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',0,zhook_handle)
343 !
344 kresp=0
345 !
346  CALL io_buff(&
347  hrec,'W',gfound)
348 !
349 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',1,zhook_handle)
350 IF (gfound) RETURN
351 !
352 IF(hdir=='H')THEN
353  CALL gather_and_write_mpi(pfield,zwork,nmask)
354 ELSE !no horizontal dim. case (not masked)
355  zwork(1:kl)=pfield(1:kl)
356  zwork(kl+1:nfull)=sum(pfield(1:kl))/REAL(kl)
357 ENDIF
358 !
359 IF (nrank==npio) THEN
360  !
361 #ifdef SFX_MPI
362  xtime0 = mpi_wtime()
363 #endif
364  !
365  IF(lfanocompact)THEN
366  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
367  ! -- Pour ecrire sans compactage
368  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
369  CALL faienc(kresp,nunit_fa,cprefix1d,0,hrec,zwork,.false.)
370  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
371  ! On remet la valeur par defaut
372  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
373  ELSE
374  zmean =0.0
375  zcount=0.0
376  DO i=1,nfull
377  IF(zwork(i)/=xundef)THEN
378  zmean =zmean+zwork(i)
379  zcount=zcount+1.0
380  ENDIF
381  ENDDO
382  IF (zcount.GT.0.0) zmean=zmean/zcount
383  WHERE(zwork(:)==xundef)zwork(:)=zmean
384  CALL faienc(kresp,nunit_fa,cprefix1d,0,hrec,zwork,.false.)
385  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
386  ENDIF
387  !
388 #ifdef SFX_MPI
389  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
390 #endif
391  !
392 ENDIF
393 !
394 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX1_FA',1,zhook_handle)
395 !
396 END SUBROUTINE write_surfx1_fa
397 !
398 ! #############################################################
399  SUBROUTINE write_surfx2_fa (HREC,KL1,KL2,PFIELD,KRESP,HCOMMENT,HDIR)
400 ! #############################################################
401 !
402 !!**** * - routine to fill a write 2D array for the externalised surface
403 !
404 !
405 !
406 !
408 !
409 USE modd_io_surf_fa, ONLY : nunit_fa, nmask, nfull, &
411 USE modd_surf_par, ONLY : xundef
412 !
413 USE modi_io_buff
414 USE modi_error_write_surf_fa
416 !
417 USE yomhook ,ONLY : lhook, dr_hook
418 USE parkind1 ,ONLY : jprb
419 !
420 IMPLICIT NONE
421 !
422 #ifdef SFX_MPI
423 include "mpif.h"
424 #endif
425 !
426 !* 0.1 Declarations of arguments
427 !
428 !
429 !
430  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
431 INTEGER, INTENT(IN) :: KL1 ! number of points
432 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
433 REAL, DIMENSION(KL1,KL2), INTENT(IN) :: PFIELD ! array containing the data field
434 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
435  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
436  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
437  ! 'H' : field with
438  ! horizontal spatial dim.
439  ! '-' : no horizontal dim.
440 !* 0.2 Declarations of local variables
441 !
442 LOGICAL :: GFOUND
443  CHARACTER(LEN=4) :: YPREFIX
444  CHARACTER(LEN=3) :: YPATCH
445 INTEGER :: I, JL ! loop counter
446 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
447 REAL :: XTIME0
448 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD,1)),SIZE(PFIELD,2)) :: ZWORK ! work array read in the file
449 REAL, DIMENSION(SIZE(PFIELD,2)) :: ZMEAN, ZCOUNT
450 REAL(KIND=JPRB) :: ZHOOK_HANDLE
451 !
452 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',0,zhook_handle)
453 !
454 kresp=0
455 !
456  CALL io_buff(&
457  hrec,'W',gfound)
458 !
459 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',1,zhook_handle)
460 IF (gfound) RETURN
461 !
462  CALL gather_and_write_mpi(pfield,zwork,nmask)
463 !
464 IF (nrank==npio) THEN
465  !
466 #ifdef SFX_MPI
467  xtime0 = mpi_wtime()
468 #endif
469  !
470  IF(lfanocompact)THEN
471  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
472  ! -- Pour ecrire sans compactage
473  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
474  DO jl=1,SIZE(zwork,2)
475  WRITE(ypatch,'(I3.3)')jl
476  yprefix=cprefix2d//ypatch//'_'
477  CALL faienc(kresp,nunit_fa,yprefix,0,hrec,zwork(:,jl),.false.)
478  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
479  END DO
480  ! On remet la valeur par defaut
481  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
482  ELSE
483  zmean(:)=0.0
484  zcount(:)=0.0
485  DO i=1,nfull
486  DO jl=1,SIZE(zwork,2)
487  IF(zwork(i,jl)/=xundef) THEN
488  zmean(jl)=zmean(jl)+zwork(i,jl)
489  zcount(jl)=zcount(jl)+1.0
490  ENDIF
491  ENDDO
492  ENDDO
493  WHERE(zcount(:)>0.0)zmean(:)=zmean(:)/zcount(:)
494  DO jl=1,SIZE(zwork,2)
495  WHERE(zwork(:,jl)==xundef)zwork(:,jl)=zmean(jl)
496  WRITE(ypatch,'(I3.3)')jl
497  yprefix=cprefix2d//ypatch//'_'
498  CALL faienc(kresp,nunit_fa,yprefix,0,hrec,zwork(:,jl),.false.)
499  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
500  END DO
501  ENDIF
502  !
503 #ifdef SFX_MPI
504  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
505 #endif
506  !
507 ENDIF
508 !
509 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',1,zhook_handle)
510 !
511 END SUBROUTINE write_surfx2_fa
512 !
513 ! #############################################################
514  SUBROUTINE write_surfx3_fa (HREC,KL1,KL2,KL3,PFIELD,KRESP,HCOMMENT,HDIR)
515 ! #############################################################
516 !
517 !!**** * - routine to fill a write 2D array for the externalised surface
518 !
519 !
520 !
521 !
523 !
524 USE modd_io_surf_fa, ONLY : nunit_fa, nmask, nfull, &
526 USE modd_surf_par, ONLY : xundef
527 !
528 USE modi_io_buff
529 USE modi_error_write_surf_fa
531 !
532 USE yomhook ,ONLY : lhook, dr_hook
533 USE parkind1 ,ONLY : jprb
534 !
535 IMPLICIT NONE
536 !
537 #ifdef SFX_MPI
538 include "mpif.h"
539 #endif
540 !
541 !* 0.1 Declarations of arguments
542 !
543 !
544 !
545  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
546 INTEGER, INTENT(IN) :: KL1 ! number of points
547 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
548 INTEGER, INTENT(IN) :: KL3 ! 2nd dimension
549 REAL, DIMENSION(KL1,KL2,KL3), INTENT(IN) :: PFIELD ! array containing the data field
550 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
551  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
552  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
553  ! 'H' : field with
554  ! horizontal spatial dim.
555  ! '-' : no horizontal dim.
556 !* 0.2 Declarations of local variables
557 !
558 LOGICAL :: GFOUND
559  CHARACTER(LEN=4) :: YPREFIX
560  CHARACTER(LEN=3) :: YPATCH
561 INTEGER :: I, JL, JP ! loop counter
562 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
563 REAL :: XTIME0
564 REAL, DIMENSION(MAX(NFULL,SIZE(PFIELD,1)),SIZE(PFIELD,2),SIZE(PFIELD,3)) :: ZWORK ! work array read in the file
565 REAL, DIMENSION(SIZE(PFIELD,2),SIZE(PFIELD,3)) :: ZMEAN, ZCOUNT
566 REAL(KIND=JPRB) :: ZHOOK_HANDLE
567 !
568 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',0,zhook_handle)
569 !
570 kresp=0
571 !
572  CALL io_buff(hrec,'W',gfound)
573 !
574 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX2_FA',1,zhook_handle)
575 IF (gfound) RETURN
576 !
577  CALL gather_and_write_mpi(pfield,zwork,nmask)
578 !
579 IF (nrank==npio) THEN
580  !
581 #ifdef SFX_MPI
582  xtime0 = mpi_wtime()
583 #endif
584  !
585  IF(lfanocompact)THEN
586  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
587  ! -- Pour ecrire sans compactage
588  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
589  DO jp=1,SIZE(zwork,3)
590  DO jl=1,SIZE(zwork,2)
591  WRITE(ypatch,'(I3.3)')jl
592  yprefix=cprefix2d//ypatch//'_'
593  CALL faienc(kresp,nunit_fa,yprefix,0,hrec,zwork(:,jl,jp),.false.)
594  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
595  ENDDO
596  END DO
597  ! On remet la valeur par defaut
598  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
599  ELSE
600  zmean(:,:)=0.0
601  zcount(:,:)=0.0
602  DO i=1,nfull
603  DO jp=1,SIZE(zwork,3)
604  DO jl=1,SIZE(zwork,2)
605  IF(zwork(i,jl,jp)/=xundef) THEN
606  zmean(jl,jp)=zmean(jl,jp)+zwork(i,jl,jp)
607  zcount(jl,jp)=zcount(jl,jp)+1.0
608  ENDIF
609  ENDDO
610  ENDDO
611  ENDDO
612  WHERE(zcount(:,:)>0.0)zmean(:,:)=zmean(:,:)/zcount(:,:)
613  DO jp=1,SIZE(zwork,3)
614  DO jl=1,SIZE(zwork,2)
615  WHERE(zwork(:,jl,jp)==xundef)zwork(:,jl,jp)=zmean(jl,jp)
616  WRITE(ypatch,'(I3.3)')jl
617  yprefix=cprefix2d//ypatch//'_'
618  CALL faienc(kresp,nunit_fa,yprefix,0,hrec,zwork(:,jl,jp),.false.)
619  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
620  ENDDO
621  END DO
622  ENDIF
623  !
624 #ifdef SFX_MPI
625  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
626 #endif
627  !
628 ENDIF
629 !
630 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFX3_FA',1,zhook_handle)
631 !
632 END SUBROUTINE write_surfx3_fa
633 !
634 ! #############################################################
635  SUBROUTINE write_surfn1_fa (&
636  HREC,KL,KFIELD,KRESP,HCOMMENT,HDIR)
637 ! #############################################################
638 !
639 !!**** * - routine to write an integer array
640 !
641 !
642 !
643 !
645 !
647 !
648 USE mode_fasurfex
649 !
650 USE modi_io_buff
651 USE modi_error_write_surf_fa
653 !
654 USE yomhook ,ONLY : lhook, dr_hook
655 USE parkind1 ,ONLY : jprb
656 !
657 IMPLICIT NONE
658 !
659 #ifdef SFX_MPI
660 include "mpif.h"
661 #endif
662 !
663 !* 0.1 Declarations of arguments
664 !
665 !
666 !
667  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
668 INTEGER, INTENT(IN) :: KL ! number of points
669 INTEGER, DIMENSION(KL), INTENT(IN) :: KFIELD ! array containing the data field
670 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
671  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
672  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
673  ! 'H' : field with
674  ! horizontal spatial dim.
675  ! '-' : no horizontal dim.
676 !* 0.2 Declarations of local variables
677 !
678 LOGICAL :: GFOUND
679  CHARACTER(LEN=18) :: YNAME! Field Nam
680 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
681 INTEGER, DIMENSION(MAX(NFULL,SIZE(KFIELD))) :: IWORK ! work array read in the file
682 REAL :: XTIME0
683 REAL(KIND=JPRB) :: ZHOOK_HANDLE
684 !
685 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',0,zhook_handle)
686 !
687 kresp = 0
688 !
689  CALL io_buff(&
690  hrec,'W',gfound)
691 !
692 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',1,zhook_handle)
693 IF (gfound) RETURN
694 !
695 IF (hdir/='H' .OR. hrec=="-") THEN
696  iwork(1:kl) = kfield
697 ELSE
698  CALL gather_and_write_mpi(kfield,iwork,nmask)
699 ENDIF
700 !
701 IF (nrank==npio) THEN
702  !
703 #ifdef SFX_MPI
704  xtime0 = mpi_wtime()
705 #endif
706  !
707  IF(lfanocompact)THEN
708  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
709  ! -- Pour ecrire sans compactage
710  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
711  ENDIF
712  !
713  yname=trim(cprefix1d)//trim(hrec)
714  !
715  CALL faecr_i_d(kresp,nunit_fa,yname,kl,iwork(1:kl))
716  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
717  !
718  IF(lfanocompact)THEN
719  ! On remet la valeur par defaut
720  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
721  ENDIF
722  !
723 #ifdef SFX_MPI
724  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
725 #endif
726  !
727 ENDIF
728 !
729 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFN1_FA',1,zhook_handle)
730 RETURN
731 !
732 END SUBROUTINE write_surfn1_fa
733 !
734 ! #############################################################
735  SUBROUTINE write_surfl1_fa (&
736  HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR)
737 ! #############################################################
738 !
739 !!**** * - routine to write a logical array
740 !
741 !
742 !
743 !
745 !
747 !
748 USE mode_fasurfex
749 !
750 USE modi_io_buff
751 USE modi_error_write_surf_fa
752 !
753 USE yomhook ,ONLY : lhook, dr_hook
754 USE parkind1 ,ONLY : jprb
755 !
756 IMPLICIT NONE
757 !
758 #ifdef SFX_MPI
759 include "mpif.h"
760 #endif
761 !
762 !* 0.1 Declarations of arguments
763 !
764 !
765 !
766  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
767 INTEGER, INTENT(IN) :: KL ! number of points
768 LOGICAL, DIMENSION(KL), INTENT(IN) :: OFIELD ! array containing the data field
769 INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears
770  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
771  CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
772  ! 'H' : field with
773  ! horizontal spatial dim.
774  ! '-' : no horizontal dim.
775 !* 0.2 Declarations of local variables
776 !
777 LOGICAL :: GFOUND
778  CHARACTER(LEN=18):: YNAME ! Field Name
779 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
780 REAL :: XTIME0
781 REAL(KIND=JPRB) :: ZHOOK_HANDLE
782 !
783 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',0,zhook_handle)
784 !
785 kresp=0
786 !
787  CALL io_buff(&
788  hrec,'W',gfound)
789 !
790 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',1,zhook_handle)
791 IF (gfound) RETURN
792 !
793 IF (nrank==npio) THEN
794  !
795 #ifdef SFX_MPI
796  xtime0 = mpi_wtime()
797 #endif
798  !
799  IF(lfanocompact)THEN
800  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
801  ! -- Pour ecrire sans compactage
802  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
803  ENDIF
804  !
805  yname=trim(cprefix1d)//trim(hrec)
806  CALL faecr_l_d(kresp,nunit_fa,yname,kl,ofield)
807  IF (kresp/=0) CALL error_write_surf_fa(hrec,kresp)
808  !
809  IF(lfanocompact)THEN
810  ! On remet la valeur par defaut
811  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
812  ENDIF
813  !
814 #ifdef SFX_MPI
815  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
816 #endif
817  !
818 ENDIF
819 !
820 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFL1_FA',1,zhook_handle)
821 !
822 END SUBROUTINE write_surfl1_fa
823 !
824 ! #############################################################
825  SUBROUTINE write_surft0_fa (&
826  HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
827 ! #############################################################
828 !
829 !!**** * - routine to write a date
830 !
831 !
833 !
834 USE mode_fasurfex
835 !
836 USE modi_io_buff
837 USE modi_error_write_surf_fa
838 !
839 USE yomhook ,ONLY : lhook, dr_hook
840 USE parkind1 ,ONLY : jprb
841 !
842 IMPLICIT NONE
843 !
844 !* 0.1 Declarations of arguments
845 !
846 !
847 !
848  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
849 INTEGER, INTENT(IN) :: KYEAR ! year
850 INTEGER, INTENT(IN) :: KMONTH ! month
851 INTEGER, INTENT(IN) :: KDAY ! day
852 REAL, INTENT(IN) :: PTIME ! time
853 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
854  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
855 
856 !* 0.2 Declarations of local variables
857 !
858 LOGICAL :: GFOUND
859  CHARACTER(LEN=18) :: YNAME ! Field Name
860 INTEGER :: IRET
861 INTEGER :: IHOUR, IMIN, ISEC
862 INTEGER :: INGRIB,INBPDG,INBCSP,ISTRON,IPUILA,IDMOPL
863 INTEGER, DIMENSION(3) :: ITDATE
864 REAL(KIND=JPRB) :: ZHOOK_HANDLE
865 !
866 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',0,zhook_handle)
867 !
868 kresp=0
869 !
870 IF (hrec=='DTCUR') THEN
871 !
872  ihour = floor(ptime)/3600
873  imin = floor(ptime)/60 - ihour * 60
874  isec = nint(ptime) - ihour * 3600 - imin * 60
875  CALL fandar(iret,nunit_fa,(/ kyear, kmonth, kday, ihour, imin, isec, 0, 0, 0, 0, 0 /))
876 !
877 ELSE
878 !
879  CALL io_buff(&
880  hrec,'W',gfound)
881  IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',1,zhook_handle)
882  IF (gfound) RETURN
883 !
884 END IF
885 !
886 itdate(1) = kyear
887 itdate(2) = kmonth
888 itdate(3) = kday
889 !
890 IF(lfanocompact)THEN
891  CALL faveur(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
892  ! -- Pour ecrire sans compactage
893  CALL fagote(kresp,nunit_fa,-1,inbpdg,inbcsp,istron,ipuila,idmopl)
894 ENDIF
895 !
896 yname=trim(cprefix1d)//trim(hrec)//'%TDATE'
897  CALL faecr_i_d(kresp,nunit_fa,yname,3,itdate)
898 IF (kresp/=0) THEN
899  CALL error_write_surf_fa(hrec,kresp)
900 ENDIF
901 !
902 yname=trim(cprefix1d)//trim(hrec)//'%TIME'
903  CALL faecr_r(kresp,nunit_fa,yname,ptime)
904 IF (kresp/=0) THEN
905  CALL error_write_surf_fa(hrec,kresp)
906 ENDIF
907 !
908 IF(lfanocompact)THEN
909  ! On remet la valeur par defaut
910  CALL fagote(kresp,nunit_fa,ingrib,inbpdg,inbcsp,istron,ipuila,idmopl)
911 ENDIF
912 !
913 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT0_FA',1,zhook_handle)
914 !
915 END SUBROUTINE write_surft0_fa
916 !
917 ! #############################################################
918  SUBROUTINE write_surft2_fa (&
919  HREC,KL1,KL2,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
920 ! #############################################################
921 !
922 !!**** * - routine to write a date
923 !
924 !
925 !
926 !
928 !
930 !
931 USE mode_fasurfex
932 !
933 USE modi_io_buff
934 USE modi_abor1_sfx
935 USE modi_error_write_surf_fa
936 !
937 USE yomhook ,ONLY : lhook, dr_hook
938 USE parkind1 ,ONLY : jprb
939 !
940 IMPLICIT NONE
941 !
942 #ifdef SFX_MPI
943 include "mpif.h"
944 #endif
945 !
946 !* 0.1 Declarations of arguments
947 !
948 !
949 !
950  CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read
951 INTEGER, INTENT(IN) :: KL1 ! number of points
952 INTEGER, INTENT(IN) :: KL2 ! 2nd dimension
953 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KYEAR ! year
954 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KMONTH ! month
955 INTEGER, DIMENSION(KL1,KL2), INTENT(IN) :: KDAY ! day
956 REAL, DIMENSION(KL1,KL2), INTENT(IN) :: PTIME ! time
957 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
958  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! comment string
959 
960 !* 0.2 Declarations of local variables
961 !
962 LOGICAL :: GFOUND
963  CHARACTER(LEN=18):: YNAME ! Field Name
964 INTEGER, DIMENSION(3,SIZE(KYEAR,1),SIZE(KYEAR,2)) :: ITDATE
965 REAL :: XTIME0
966 REAL(KIND=JPRB) :: ZHOOK_HANDLE
967 !
968 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',0,zhook_handle)
969 !
970 kresp = 0
971 !
972  CALL io_buff(&
973  hrec,'W',gfound)
974 !
975 IF (gfound .AND. lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',1,zhook_handle)
976 IF (gfound) RETURN
977 !
978 IF (nrank==npio) THEN
979  !
980 #ifdef SFX_MPI
981  xtime0 = mpi_wtime()
982 #endif
983  !
984  itdate(1,:,:) = kyear(:,:)
985  itdate(2,:,:) = kmonth(:,:)
986  itdate(3,:,:) = kday(:,:)
987  !
988  yname=trim(cprefix1d)//trim(hrec)
989  WRITE(nluout,*) ' WRITE_SURFT2_FA : time in 2 dimensions not yet implemented : YNAME=',yname,'ITDATE=',itdate
990  CALL abor1_sfx('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA: time in 2 dimensions not yet implemented')
991  !
992 #ifdef SFX_MPI
993  xtime_npio_write = xtime_npio_write + (mpi_wtime() - xtime0)
994 #endif
995  !
996 ENDIF
997 !
998 IF (lhook) CALL dr_hook('MODE_WRITE_SURF_FA:WRITE_SURFT2_FA',1,zhook_handle)
999 !
1000 END SUBROUTINE write_surft2_fa
1001 !
1002 END MODULE mode_write_surf_fa
subroutine faienc(KREP, KNUMER, CDPREF, KNIVAU, CDSUFF, PCHAMP, LDCOSP)
Definition: faienc.F90:92
subroutine error_write_surf_fa(HREC, KRESP)
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine fagote(KREP, KNUMER, KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: fagote.F90:274
subroutine write_surfx0_fa(HREC, PFIELD, KRESP, HCOMMENT)
subroutine write_surft0_fa(HREC, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine faecr_l_d(KREP, KN, CNOMC, KSIZE, LDATA)
subroutine write_surfc0_fa(HREC, HFIELD, KRESP, HCOMMENT)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
subroutine faveur(KREP, KNUMER, KNGRIB, KNARG1, KNARG2, KNARG3, KNARG4, KNARG5)
Definition: faveur.F90:173
character(len=4), save cprefix1d
subroutine write_surft2_fa(HREC, KL1, KL2, KYEAR, KMONTH, KDAY, PTIME, KRESP, HCOMMENT)
subroutine faecr_c(KREP, KN, CNOMC, KSIZE, CDATA)
subroutine write_surfn1_fa(HREC, KL, KFIELD, KRESP, HCOMMENT, HDIR)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine faecr_i(KREP, KN, CNOMC, KDATA)
subroutine faecr_l(KREP, KN, CNOMC, LDATA)
subroutine write_surfx3_fa(HREC, KL1, KL2, KL3, PFIELD, KRESP, HCOMMENT, HDIR)
character(len=1), save cprefix2d
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
subroutine faecr_r(KREP, KN, CNOMC, PDATA)
subroutine write_surfl1_fa(HREC, KL, OFIELD, KRESP, HCOMMENT, HDIR)
subroutine io_buff(HREC, HACTION, OKNOWN)
Definition: io_buff.F90:8
subroutine write_surfn0_fa(HREC, KFIELD, KRESP, HCOMMENT)
subroutine write_surfx1_fa(HREC, KL, PFIELD, KRESP, HCOMMENT, HDIR)
subroutine fandar(KREP, KNUMER, KDATEF)
Definition: fandar.F90:174
logical, save lfanocompact
subroutine write_surfl0_fa(HREC, OFIELD, KRESP, HCOMMENT)
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
subroutine write_surfx2_fa(HREC, KL1, KL2, PFIELD, KRESP, HCOMMENT, HDIR)
integer, dimension(:), pointer nmask
subroutine faecr_i_d(KREP, KN, CNOMC, KSIZE, KDATA)