SURFEX v8.1
General documentation of Surfex
mode_write_surf_cov.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 
7 !
8 INTERFACE write_surf_cov
9  MODULE PROCEDURE write_surf_cov
10 END INTERFACE
11 !
12 CONTAINS
13 !
14 ! #############################################################
15  SUBROUTINE write_surf_cov (HSELECT, &
16  HPROGRAM,HREC,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR)
17 ! #############################################################
18 !
19 !
20 !
21 USE modd_surfex_mpi, ONLY : nrank, npio
22 !
24 #ifdef SFX_MNH
25 USE modi_write_surfx2cov_mnh
26 #endif
27 !
28 USE yomhook ,ONLY : lhook, dr_hook
29 USE parkind1 ,ONLY : jprb
30 !
31 IMPLICIT NONE
32 !
33 !* 0.1 Declarations of arguments
34 !
35 !
36  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
37 !
38  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
39  CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to be read
40 REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD ! array containing the data field
41 LOGICAL,DIMENSION(:), INTENT(IN) :: OFLAG ! mask for array filling
42 INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
43  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
44  CHARACTER(LEN=1),OPTIONAL,INTENT(IN) :: HDIR ! type of field :
45 ! ! 'H' : field with
46 ! ! horizontal spatial dim.
47 ! ! '-' : no horizontal dim.
48 !* 0.2 Declarations of local variables
49 !
50  CHARACTER(LEN=12) :: YREC
51  CHARACTER(LEN=16) :: YREC2
52  CHARACTER(LEN=100) :: YCOMMENT
53 INTEGER :: IL1
54 INTEGER :: IL2
55  CHARACTER(LEN=1) :: YDIR
56 INTEGER :: JCOVER, ICOVER
57 REAL(KIND=JPRB) :: ZHOOK_HANDLE
58 !
59 IF (lhook) CALL dr_hook('WRITE_SURF_COV',0,zhook_handle)
60 !
61 yrec = hrec
62 ydir = 'H'
63 IF (PRESENT(hdir)) ydir = hdir
64 il1 = SIZE(pfield,1)
65 il2 = SIZE(pfield,2)
66 !
67 IF (hprogram=='MESONH') THEN
68 #ifdef SFX_MNH
69  yrec2 = yrec
70  CALL write_surfx2cov_mnh(yrec2,il1,il2,pfield,oflag,kresp,hcomment,ydir)
71 #endif
72 ELSE
73  !
74 !RJ: could be generalized for all
75  IF (nrank==npio) THEN
76  IF (hprogram=='LFI ') THEN
77  yrec = 'COVER_PACKED'
78  ycomment='-'
79 !! YCOMMENT=HCOMMENT
80  CALL write_surf(hselect,hprogram,yrec,.false.,kresp,ycomment)
81  ENDIF
82  ENDIF
83  !
84  icover=0
85  DO jcover=1,SIZE(oflag)
86  !
87  WRITE(yrec,'(A5,I3.3)') 'COVER',jcover
88  ycomment='X_Y_'//yrec
89  IF (.NOT. oflag(jcover)) cycle
90  icover = icover+1
91  !
92  CALL write_surf(hselect, hprogram,yrec,pfield(:,icover),kresp,ycomment,ydir)
93  !
94  END DO
95 END IF
96 !
97 IF (lhook) CALL dr_hook('WRITE_SURF_COV',1,zhook_handle)
98 !
99 END SUBROUTINE write_surf_cov
100 
101 END MODULE mode_write_surf_cov
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15