Newer
Older
!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
!-----------------------------------------------------------------
!--------------- special set of characters for RCS information
!-----------------------------------------------------------------
! $Source$ $Revision$
! masdev4_7 BUG1 2007/06/15 17:47:27
!-----------------------------------------------------------------
!####################################
MODULE MODI_READ_ALL_DATA_MESONH_CASE
!####################################
INTERFACE
SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,HPGDFILE, &
HDAD_NAME )
CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file
CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file
CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file
CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME! true name of the Mesonh input file
!
END SUBROUTINE READ_ALL_DATA_MESONH_CASE
!
END INTERFACE
!
END MODULE MODI_READ_ALL_DATA_MESONH_CASE
!
! #########################################################################
SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,HPGDFILE, &
HDAD_NAME )
! #########################################################################
!
!!**** *READ_ALL_DATA_MESONH_CASE* - reads data for the initialization of real cases.
!!
!! PURPOSE
!! -------
!! This routine calls the routines reading the different input files.
!! It closes the PGD file.
!!
!!** METHOD
!! ------
!! Projection is read in READ_LFIFM_PGD (MODD_GRID).
!! Grid and definition of large domain are read in PGD file and MESONH file
!! (READ_LFIFM_PGD and MESONH_INFO in READ_GENERAL) and coherence is tested.
!! The PGD files are also read in READ_LFIFM_PGD.
!! The PGD file is closed.
!! The MESO-NH domain is defined from PRE_REAL1.nam inputs in SET_SUBDOMAIN.
!! Vertical grid is defined in READ_VER_GRID.
!! Variables fields are read in Mesonh file and stored on MESO-NH domain
!! (READ_LFI_PRC).
!!
!! EXTERNAL
!! --------
!! subroutine READ_LFIFM_PGD: to read PGD file
!! subroutine READ_GRID_TIME_MESONH_CASE : to read the geographic and time data.
!! subroutine SET_SUBDOMAIN : to define the horizontal MESO-NH domain.
!! subroutine READ_VER_GRID : to read the vertical grid in namelist file.
!! subroutine READ_PRC_FMFILE : to read the large scale fields on the MESO-NH
!! domain.
!!
!! function FMLOOK :to retrieve a logical unit number associated with a file
!!
!! Module MODI_READ_GRID_TIME_MESONH_CASE : interface for subroutine
!! READ_GRID_TIME_MESONH_CASE
!! Module MODI_SET_SUBDOMAIN : interface for subroutine SET_SUBDOMAIN
!! Module MODI_READ_VER_GRID : interface for subroutine READ_VER_GRID
!! Module MODI_READ_PRC_FMFILE : interface for subroutine READ_PRC_FMFILE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! Module MODD_CONF : contains configuration variables for all models.
!! NVERB : verbosity level for output-listing
!! Module MODD_LUNIT : contains logical unit names for all models
!! CLUOUT0 : name of output-listing
!! Module MODD_PGDDIM : contains dimension of PGD fields
!! NPGDIMAX: dimension along x (no external point)
!! NPGDJMAX: dimension along y (no external point)
!! Module MODD_PARAMETERS
!! JPHEXT
!!
!! REFERENCE
!! ---------
!!
!! Book 2
!!
!!
!! AUTHOR
!! ------
!!
!! V.Masson Meteo-France
!!
!! MODIFICATIONS
!! -------------
!! Original 16/12/94
!! 24/09/96 (V. Masson) add HDAD_NAME
!! 25/10/96 (V. Masson) remove 3D pressure from routine outputs
!! 12/12/96 (V. Masson) add vertical velocity
!! 07/05/97 (V. Masson) add tke
!! 10/06/97 (V. Masson) add pressure
!! 10/07/97 (V. Masson) add epsilon
!! 11/07/97 (V. Masson) add READ_DESFM
!! 11/07/97 (V. Masson) add passive scalars
!! 20/01/98 (J. Stein) add the Large scale fields reading
!! 30/04/98 (V. Masson) Large scale VEG and LAI
!! 02/07/00 (F.Solmon/V.Masson) adaptation for patch approach
!! 01/2004 (V. Masson) removes surface (externalization)
!! 01/06/02 (O.Nuissier) bogussing of tropical cyclone
!! Aou 09, 2005 (D.Barbary) call to compare_dad
!! 19/03/2008 (J.Escobar) rename INIT to INIT_MNH --> grib problem
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
!!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODE_FM
USE MODE_IO_ll
USE MODE_FMREAD
!
USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules
USE MODI_READ_HGRID
USE MODI_READ_VER_GRID
USE MODI_READ_PRC_FMFILE
USE MODI_CHECK_ZS
USE MODI_CHECK_ZHAT
USE MODI_SET_BOGUS_VORTEX
USE MODI_COMPARE_DAD
USE MODI_ZS_BOUNDARY
!
USE MODD_CONF ! declaration modules
USE MODD_CONF_n
USE MODD_PARAM_n
USE MODD_LUNIT
USE MODD_LUNIT_n
USE MODD_PGDDIM
USE MODD_PARAMETERS
USE MODD_REF_n
USE MODD_CST
USE MODD_TIME_n
USE MODD_DIM_n
USE MODD_DYN_n
USE MODD_GRID_n
USE MODD_GR_FIELD_n
USE MODD_FIELD_n
USE MODD_LBC_n
USE MODD_HURR_CONF, ONLY: LBOGUSSING, CDADATMFILE,CDADBOGFILE
USE MODD_PREP_REAL
!
USE MODI_INIT_MNH
!
!20131113 add modules for update_halo and check
USE MODE_ll
USE MODD_ARGSLIST_ll, ONLY : LIST_ll
USE MODE_MPPDB
!
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
IMPLICIT NONE
!
!* 0.1 Declaration of arguments
! ------------------------
!
CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file
CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file
CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file
CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME! true name of the Mesonh input file
!
!
!* 0.2 Declaration of local variables
! ------------------------------
!
INTEGER :: IIINF_LS ! lower boundary of the MESO-NH domain
! ! in the large domain (direction I).
INTEGER :: IISUP_LS ! upper boundary of the MESO-NH domain
! ! in the large domain (direction I).
INTEGER :: IJINF_LS ! lower boundary of the MESO-NH domain
! ! in the large domain (direction J).
INTEGER :: IJSUP_LS ! upper boundary of the MESO-NH domain
! ! in the large domain (direction J).
INTEGER :: IXOR_LS ! I shift between PGD file and LS atmospheric file
INTEGER :: IYOR_LS ! J shift between PGD file and LS atmospheric file
!
INTEGER :: IRESP ! return-code if problems occured
INTEGER :: ILUOUT0 ! logical unit for file CLUOUT0
!
CHARACTER(LEN=28) :: YPGD_NAME, YPGD_DAD_NAME
CHARACTER(LEN=28) :: YOUTFILE
CHARACTER(LEN=2) :: YPGD_TYPE
!
INTEGER :: IMASDEV ! Masdev version
INTEGER :: IGRID, ILENCH
CHARACTER(LEN=100):: YCOMMENT
!
!* temporary namelist configuration variables
!
INTEGER :: IVERB ! verbosity level
CHARACTER(LEN=3) :: YEQNSYS ! EQuatioN SYStem
CHARACTER(LEN=5) :: YPRESOPT ! PRESsure OPTion
LOGICAL :: GRES
REAL :: ZRES
INTEGER :: IPRE_REAL1
!
!20131113 add vars related to ADD3DFIELD and UPDATE_HALO
INTEGER :: IINFO_ll
TYPE(LIST_ll), POINTER :: TZFIELDS_ll => NULL() ! list of fields to exchange
!
!------------------------------------------------------------------------------
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
!
CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
!
!-------------------------------------------------------------------------------
!
!* 1. reading of the atm. fields, on the entire atm. file domain
! ----------------------------------------------------------
!
!* 1.1 save of some configuration variables before call to INIT
!
YEQNSYS = CEQNSYS
YPRESOPT= CPRESOPT
IVERB = NVERB
GRES = LRES
ZRES = XRES
!
!* note that some quantities such as grid and domain definition
! will be erased by the following routines
!
YOUTFILE=CINIFILE
CINIFILE=HFMFILE
!
CALL CLOSE_ll(HPRE_REAL1, IOSTAT=IRESP)
CALL INIT_MNH
CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
DELIM='QUOTE',MODE=GLOBAL,STATUS='OLD')
!
CINIFILE=YOUTFILE
!
CSTORAGE_TYPE='TT' ! after prep_real_case, file type is 'TT'
!
!* 1.2 restores values after call to INIT
!
IF (LEN_TRIM(YEQNSYS)>0) CEQNSYS = YEQNSYS
IF (LEN_TRIM(YPRESOPT)>0) CPRESOPT= YPRESOPT
IF (IVERB/=NUNDEF) NVERB = IVERB
LRES = GRES
XRES = ZRES
!
!* 2. Reading of physiographic data domain
! ------------------------------------
!
CALL READ_HGRID(0,HPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE)
!
!* 3. Reading of large-scale grid and time
! ------------------------------------
!
CALL READ_GRID_TIME_MESONH_CASE(HFMFILE,IXOR_LS,IYOR_LS,HDAD_NAME)
!
!* 4. Definition of horizontal domain
! -------------------------------
!
IIINF_LS = 1
IISUP_LS = NIMAX + 2* JPHEXT
IJINF_LS = 1
IJSUP_LS = NJMAX + 2* JPHEXT
!
!
!* 5. Reading of vertical grid
! ------------------------
!
CALL READ_VER_GRID(HPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS)
!
!* 6. Add a bogus vortex from observations (radar, satellite,...)
! -----------------------------------------------------------
!
IF (LBOGUSSING) THEN
IF (LEN_TRIM(CDADBOGFILE) >0 ) THEN
IF (LEN_TRIM(CDADATMFILE) == 0 ) THEN
WRITE(ILUOUT0,*) 'READ_ALL_DATA_MESONH_CASE: CDADATMFILE not initialized in nml NAM_HURR_CONF'
WRITE(ILUOUT0,*) '-> JOB ABORTED'
!callabortstop
CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
CALL ABORT
STOP
ELSE
IF (LEN_TRIM(HDAD_NAME) >0 ) THEN
IF (ADJUSTL(ADJUSTR(HDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADATMFILE))) THEN
WRITE(ILUOUT0,*) &
'READ_ALL_DATA_MESONH_CASE: CDADATMFILE is NOT the DAD of input file'
WRITE(ILUOUT0,*) ' CDADATMFILE='//TRIM(CDADATMFILE)
WRITE(ILUOUT0,*) ' DAD_NAME of model1='//TRIM(HDAD_NAME)
WRITE(ILUOUT0,*) '-> JOB ABORTED'
!callabortstop
CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
CALL ABORT
STOP
ELSE
CALL COMPARE_DAD(CDADATMFILE,CDADBOGFILE,IRESP)
IF (IRESP .NE. 0) THEN
WRITE(ILUOUT0,*) &
'READ_ALL_DATA_MESONH_CASE: Unable to replace the DAD of output file with CDADBOGFILE'
WRITE(ILUOUT0,*) '-> JOB ABORTED'
!callabortstop
CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
CALL ABORT
STOP
ENDIF
HDAD_NAME=CDADBOGFILE
ENDIF
ENDIF ! no DAD_NAME (bogussing of model1)
ENDIF
ENDIF
CALL SET_BOGUS_VORTEX(XUT,XVT,XTHT)
ENDIF
!
!* 7. truncation of the fields on the new domain
! ------------------------------------------
!
IF (IIINF_LS/=1 .OR. IISUP_LS/=SIZE(XTHT,1)) CLBCX(:) ='OPEN'
IF (IJINF_LS/=1 .OR. IJSUP_LS/=SIZE(XTHT,2)) CLBCY(:) ='OPEN'
!
CALL READ_PRC_FMFILE(IIINF_LS,IISUP_LS,IJINF_LS,IJSUP_LS )
!
!* 8. Orography
! ---------
!
ALLOCATE(XZS(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
CALL FMREAD(HPGDFILE,'ZS',CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP)
CALL ZS_BOUNDARY(XZS,XZS_LS)
!
ALLOCATE(XZSMT(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
CALL FMREAD(HPGDFILE,'MASDEV',CLUOUT,'XY',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
IF (IMASDEV<=46) THEN
XZSMT = XZS
ELSE
CALL FMREAD(HPGDFILE,'ZSMT',CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
END IF
CALL ZS_BOUNDARY(XZSMT,XZSMT_LS)
!
!
!* 9. Surface pressure computation
! ----------------------------
!
ALLOCATE(XPS_LS (IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
!
XPS_LS(:,:) = XP00* ( &
0.5 * ( (XPMASS_LS(:,:,JPVEXT )/XP00)**(XRD/XCPD) &
+(XPMASS_LS(:,:,JPVEXT+1)/XP00)**(XRD/XCPD) &
) &
)**(XCPD/XRD)
!
!20131113 add update_halo
CALL ADD2DFIELD_ll(TZFIELDS_ll,XPS_LS )
CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
CALL CLEANLIST_ll(TZFIELDS_ll)
CALL MPPDB_CHECK2D(XPS_LS,"PGDFILTER9:XPS_LS",PRECISION)
!
!
!* 10. Check coherence between the 2 orographies
! -----------------------------------------
!
!20131023 mise en commentaire du check_zs et zhat
!
!IF (LEN_TRIM(HDAD_NAME)>0) CALL CHECK_ZS(HFMFILE,HDAD_NAME,IIINF_LS,IJINF_LS)
!IF (LEN_TRIM(HDAD_NAME)>0) CALL CHECK_ZHAT(HFMFILE,HDAD_NAME)
!
!-------------------------------------------------------------------------------
!
WRITE (ILUOUT0,*) 'Monitor READ_ALL_DATA_MESONH_CASE completed'
!
!-------------------------------------------------------------------------------
END SUBROUTINE READ_ALL_DATA_MESONH_CASE