67b8b5df6e02c06c63a682dcad11a2390d13a7fc
[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 !!
39 !----------------------------------------------------------------------------
40 !
41 !*    0.     DECLARATION
42 !            -----------
43 !
44 USE MODD_DATA_COVER_PAR,  ONLY : JPCOVER
45 USE MODD_PREP,             ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP
46 !
47 USE MODD_SEAFLUX_n,       ONLY : XCOVER, LCOVER, XZS, XSEABATHY
48 USE MODD_SEAFLUX_GRID_n,  ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE, NDIM
49 USE MODD_DATA_SEAFLUX_n,    ONLY : LSST_DATA, NTIME, XDATA_SST, TDATA_SST
50 !
51 USE MODI_GET_LUOUT
52 USE MODI_OPEN_AUX_IO_SURF
53 USE MODI_GET_SURF_SIZE_n
54 USE MODI_PACK_PGD
55 USE MODI_PREP_GRID_EXTERN
56 USE MODI_PREP_OUTPUT_GRID
57 USE MODI_READ_SURF
58 USE MODI_HOR_INTERPOL
59 USE MODI_READ_PGD_SEAFLUX_PAR_n
60 USE MODI_CLOSE_AUX_IO_SURF
61 USE MODI_CLEAN_PREP_OUTPUT_GRID
62 !
63 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
64 USE PARKIND1  ,ONLY : JPRB
65 !
66 IMPLICIT NONE
67 !
68 !*    0.1    Declaration of arguments
69 !            ------------------------
70 !
71  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM    ! Type of program
72  CHARACTER(LEN=28),    INTENT(IN)  :: HINIFILE    ! input atmospheric file name
73  CHARACTER(LEN=6),     INTENT(IN)  :: HINIFILETYPE! input atmospheric file type
74  CHARACTER(LEN=28),    INTENT(IN)  :: HFILE       ! output file name
75  CHARACTER(LEN=6),     INTENT(IN)  :: HFILETYPE   ! output file type
76 !
77 !
78 !*    0.2    Declaration of local variables
79 !            ------------------------------
80 !
81 !*    0.3    Declaration of namelists
82 !            ------------------------
83 !
84 REAL, DIMENSION(:,:), ALLOCATABLE  :: ZSEABATHY, ZWORK
85 INTEGER :: ILUOUT
86 INTEGER :: INI
87 INTEGER :: IRESP
88 INTEGER           :: JTIME          ! loop index
89 INTEGER           :: IVERSION, IBUGFIX
90 REAL(KIND=JPRB) :: ZHOOK_HANDLE
91 !
92 !-------------------------------------------------------------------------------
93 !
94 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',0,ZHOOK_HANDLE)
95  CALL GET_LUOUT(HPROGRAM,ILUOUT)
96 !
97 !*      1.     Preparation of IO for reading in the file
98 !              -----------------------------------------
99 !
100 !* Note that all points are read, even those without physical meaning.
101 !  These points will not be used during the horizontal interpolation step.
102 !  Their value must be defined as XUNDEF.
103 !
104 !
105  CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL  ')
106 !
107 !-------------------------------------------------------------------------------
108 !
109 !*    5.      Number of points and packing
110 !             ----------------------------
111 !
112  CALL GET_SURF_SIZE_n('SEA   ',NDIM)
113 !
114 ALLOCATE(LCOVER     (JPCOVER))
115 ALLOCATE(XCOVER     (NDIM,JPCOVER))
116 ALLOCATE(XZS        (NDIM))
117 ALLOCATE(XLAT       (NDIM))
118 ALLOCATE(XLON       (NDIM))
119 ALLOCATE(XMESH_SIZE (NDIM))
120 !
121  CALL PACK_PGD(HPROGRAM, 'SEA   ',                      &
122                 CGRID,  XGRID_PAR, LCOVER,             &
123                 XCOVER, XZS,                           &
124                 XLAT, XLON, XMESH_SIZE                 )  
125 !
126 !------------------------------------------------------------------------------
127 !
128 !*      2.     Reading of grid
129 !              ---------------
130 !
131  CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
132 !
133  CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON)
134 !
135 !* mask where interpolations must be done
136 !
137 LINTERP(:) = .TRUE.
138 !
139 !------------------------------------------------------------------------------
140 !
141 !*      3.     Reading of fields
142 !              -----------------
143 !
144 ALLOCATE(ZSEABATHY(INI,1))
145  CALL READ_SURF(HPROGRAM,'BATHY',ZSEABATHY(:,1),IRESP,HDIR='A')
146 !
147 ALLOCATE(ZWORK(NDIM,1))
148  CALL HOR_INTERPOL(ILUOUT,ZSEABATHY(:,1:1),ZWORK(:,1:1)) 
149 ALLOCATE(XSEABATHY (NDIM))
150 XSEABATHY(:) = ZWORK(:,1)
151 DEALLOCATE(ZSEABATHY,ZWORK)
152 !
153 !============================================================
154 ! G. TANGUY 03/2009
155 ! reading of fields for SST_DATA
156  CALL READ_SURF(HPROGRAM,'SST_DATA',LSST_DATA,IRESP)
157 !
158 IF (LSST_DATA) CALL READ_PGD_SEAFLUX_PAR_n(HPROGRAM,INI,HDIR='A')
159 !
160 !============================================================
161 !
162  CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE)
163 !
164 !============================================================
165 !
166  CALL CLEAN_PREP_OUTPUT_GRID
167 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_SEAFLUX',1,ZHOOK_HANDLE)
168 !-------------------------------------------------------------------------------
169 !
170 END SUBROUTINE ZOOM_PGD_SEAFLUX