Juan 24/05/2017: add MPPDB_CHECK on SURFEX routine for reprod check with MNH_PARALLEL key
[MNH-git_open_source-lfs.git] / src / SURFEX / zoom_pgd_seaflux.F90
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 !     ######spl
6       SUBROUTINE ZOOM_PGD_SEAFLUX(HPROGRAM,HINIFILE,HINIFILETYPE,HFILE,HFILETYPE)
7 !     ##############################################################
8 !
9 !!**** *PGD_SEAFLUX* monitor for averaging and interpolations of SEAFLUX physiographic fields
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!    METHOD
15 !!    ------
16 !!   
17 !
18 !!    EXTERNAL
19 !!    --------
20 !!
21 !!    IMPLICIT ARGUMENTS
22 !!    ------------------
23 !!
24 !!    REFERENCE
25 !!    ---------
26 !!
27 !!    AUTHOR
28 !!    ------
29 !!
30 !!    P. Le Moigne     Meteo-France
31 !!
32 !!    MODIFICATION
33 !!    ------------
34 !!
35 !!    Original    09/2008
36 !!    G. TANGUY   03/2009 : add reading and interpolation of XDATA_SST and 
37 !!                          TDATA_SST in the case LDATA_SST=T
38 !     Modification 05/02/15 M.Moge : MPPDB_CHECK
39 !!
40 !----------------------------------------------------------------------------
41 !
42 !*    0.     DECLARATION
43 !            -----------
44 !
45 USE MODD_DATA_COVER_PAR,  ONLY : JPCOVER
46 USE MODD_PREP,             ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP
47 !
48 USE MODD_SEAFLUX_n,       ONLY : XCOVER, LCOVER, XZS, XSEABATHY
49 USE MODD_SEAFLUX_GRID_n,  ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE, NDIM
50 USE MODD_DATA_SEAFLUX_n,    ONLY : LSST_DATA, NTIME, XDATA_SST, TDATA_SST
51 !
52 USE MODI_GET_LUOUT
53 USE MODI_OPEN_AUX_IO_SURF
54 USE MODI_GET_SURF_SIZE_n
55 USE MODI_PACK_PGD
56 USE MODI_PREP_GRID_EXTERN
57 USE MODI_PREP_OUTPUT_GRID
58 USE MODI_READ_SURF
59 USE MODI_HOR_INTERPOL
60 USE MODI_READ_PGD_SEAFLUX_PAR_n
61 USE MODI_CLOSE_AUX_IO_SURF
62 USE MODI_CLEAN_PREP_OUTPUT_GRID
63 !
64 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
65 USE PARKIND1  ,ONLY : JPRB
66 !
67 #ifdef MNH_PARALLEL
68 USE MODE_MPPDB
69 !
70 #endif
71 IMPLICIT NONE
72 !
73 !*    0.1    Declaration of arguments
74 !            ------------------------
75 !
76  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM    ! Type of program
77  CHARACTER(LEN=28),    INTENT(IN)  :: HINIFILE    ! input atmospheric file name
78  CHARACTER(LEN=6),     INTENT(IN)  :: HINIFILETYPE! input atmospheric file type
79  CHARACTER(LEN=28),    INTENT(IN)  :: HFILE       ! output file name
80  CHARACTER(LEN=6),     INTENT(IN)  :: HFILETYPE   ! output file type
81 !
82 !
83 !*    0.2    Declaration of local variables
84 !            ------------------------------
85 !
86 !*    0.3    Declaration of namelists
87 !            ------------------------
88 !
89 REAL, DIMENSION(:,:), ALLOCATABLE  :: ZSEABATHY, ZWORK
90 INTEGER :: ILUOUT
91 INTEGER :: INI
92 INTEGER :: IRESP
93 INTEGER           :: JTIME          ! loop index
94 INTEGER           :: IVERSION, IBUGFIX
95 REAL(KIND=JPRB) :: ZHOOK_HANDLE
96 !
97 !-------------------------------------------------------------------------------
98 !
99 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',0,ZHOOK_HANDLE)
100  CALL GET_LUOUT(HPROGRAM,ILUOUT)
101 !
102 !*      1.     Preparation of IO for reading in the file
103 !              -----------------------------------------
104 !
105 !* Note that all points are read, even those without physical meaning.
106 !  These points will not be used during the horizontal interpolation step.
107 !  Their value must be defined as XUNDEF.
108 !
109 !
110  CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL  ')
111 !
112 !-------------------------------------------------------------------------------
113 !
114 !*    5.      Number of points and packing
115 !             ----------------------------
116 !
117  CALL GET_SURF_SIZE_n('SEA   ',NDIM)
118 !
119 ALLOCATE(LCOVER     (JPCOVER))
120 ALLOCATE(XCOVER     (NDIM,JPCOVER))
121 ALLOCATE(XZS        (NDIM))
122 ALLOCATE(XLAT       (NDIM))
123 ALLOCATE(XLON       (NDIM))
124 ALLOCATE(XMESH_SIZE (NDIM))
125 !
126  CALL PACK_PGD(HPROGRAM, 'SEA   ',                      &
127                 CGRID,  XGRID_PAR, LCOVER,             &
128                 XCOVER, XZS,                           &
129                 XLAT, XLON, XMESH_SIZE                 )  
130 #ifdef MNH_PARALLEL
131  CALL MPPDB_CHECK_SURFEX3D(XCOVER,"ZOOM_PGD_SEAFLUX:XCOVER",PRECISION,ILUOUT, 'SEA',JPCOVER)
132  CALL MPPDB_CHECK_SURFEX2D(XMESH_SIZE,"ZOOM_PGD_SEAFLUX:XMESH_SIZE",PRECISION,ILUOUT, 'SEA')
133  CALL MPPDB_CHECK_SURFEX2D(XZS,"ZOOM_PGD_SEAFLUX:XZS",PRECISION,ILUOUT, 'SEA')
134 #endif
135 !
136 !------------------------------------------------------------------------------
137 !
138 !*      2.     Reading of grid
139 !              ---------------
140 !
141  CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
142 !
143  CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON)
144 #ifdef MNH_PARALLEL
145  CALL MPPDB_CHECK_SURFEX2D(XLAT,"ZOOM_PGD_SEAFLUX:XLAT",PRECISION,ILUOUT, 'SEA')
146  CALL MPPDB_CHECK_SURFEX2D(XLON,"ZOOM_PGD_SEAFLUX:XLON",PRECISION,ILUOUT, 'SEA')
147 #endif
148 !
149 !* mask where interpolations must be done
150 !
151 LINTERP(:) = .TRUE.
152 !
153 !------------------------------------------------------------------------------
154 !
155 !*      3.     Reading of fields
156 !              -----------------
157 !
158 ALLOCATE(ZSEABATHY(INI,1))
159  CALL READ_SURF(HPROGRAM,'BATHY',ZSEABATHY(:,1),IRESP,HDIR='A')
160 !
161 ALLOCATE(ZWORK(NDIM,1))
162  CALL HOR_INTERPOL(ILUOUT,ZSEABATHY(:,1:1),ZWORK(:,1:1)) 
163 ALLOCATE(XSEABATHY (NDIM))
164 XSEABATHY(:) = ZWORK(:,1)
165 DEALLOCATE(ZSEABATHY,ZWORK)
166 !
167 !============================================================
168 ! G. TANGUY 03/2009
169 ! reading of fields for SST_DATA
170  CALL READ_SURF(HPROGRAM,'SST_DATA',LSST_DATA,IRESP)
171 !
172 IF (LSST_DATA) CALL READ_PGD_SEAFLUX_PAR_n(HPROGRAM,INI,HDIR='A')
173 !
174 !============================================================
175 !
176  CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE)
177 !
178 !============================================================
179 !
180  CALL CLEAN_PREP_OUTPUT_GRID
181 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',1,ZHOOK_HANDLE)
182 !-------------------------------------------------------------------------------
183 !
184 END SUBROUTINE ZOOM_PGD_SEAFLUX