Juan 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
[MNH-git_open_source-lfs.git] / src / MNH / open_prc_files.f90
1 !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
3 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
4 !MNH_LIC for details. version 1.
5 !-----------------------------------------------------------------
6 !--------------- special set of characters for RCS information
7 !-----------------------------------------------------------------
8 ! $Source$ $Revision$ $Date$
9 !-----------------------------------------------------------------
10 !     ##########################
11       MODULE MODI_OPEN_PRC_FILES
12 !     ##########################
13 !
14 INTERFACE
15       SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE           &
16                                           ,HCHEMFILE,HCHEMFILETYPE         &
17                                           ,HSURFFILE,HSURFFILETYPE,HPGDFILE)
18 !
19 CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1   ! name of the PRE_REAL1 file
20 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
21 CHARACTER(LEN=6),  INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file
22 CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE    ! name of the input chemical file
23 CHARACTER(LEN=6),  INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file
24 CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE    ! name of the input surface file
25 CHARACTER(LEN=6),  INTENT(OUT) :: HSURFFILETYPE! type of the input surface file
26 CHARACTER(LEN=28), INTENT(OUT) :: HPGDFILE     ! name of the physiographic data file
27 END SUBROUTINE OPEN_PRC_FILES
28 END INTERFACE
29 END MODULE MODI_OPEN_PRC_FILES
30 !
31 !     ######################################################################
32       SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE           &
33                                           ,HCHEMFILE,HCHEMFILETYPE         &
34                                           ,HSURFFILE,HSURFFILETYPE,HPGDFILE)
35 !     ######################################################################
36 !
37 !!****  *OPEN_PRC_FILES* - openning of the files used in PREP_REAL_CASE
38 !!
39 !!
40 !!    PURPOSE
41 !!    -------
42 !!
43 !!    This routine set the default name of CLUOUT0
44 !!    This routine read in 'PRE_REAL1.nam' the names of the files used in
45 !!    PREP_REAL_CASE: Aladin or Mesonh input file, physiographic data file,
46 !!    output listing file and MESO-NH output file.
47 !!    This routine opens these files (except the Aladin file) and reads the
48 !!    control variable of verbosity level NVERB.
49 !!
50 !!**  METHOD
51 !!    ------
52 !!
53 !!    CAUTION:
54 !!    This routine supposes the name of the namelist file is 'PRE_REAL1.nam'.
55 !!
56 !!    EXTERNAL
57 !!    --------
58 !!
59 !!    Routine FMATTR
60 !!    Routine FMOPEN
61 !!
62 !!    IMPLICIT ARGUMENTS
63 !!    ------------------
64 !!
65 !!      Module MODD_CONF      : contains configuration variables for all models.
66 !!         NVERB    : verbosity level for output-listing
67 !!      Module MODD_LUNIT     :  contains logical unit names for all models
68 !!         CLUOUT0  : name of output-listing
69 !!      Module MODD_LUNIT1    :
70 !!         CINIFILE : name of MESO-NH file
71 !!
72 !!    REFERENCE
73 !!    ---------
74 !!
75 !!      Book 2
76 !!
77 !!    AUTHOR
78 !!    ------
79 !!
80 !!      V.Masson  Meteo-France
81 !!
82 !!    MODIFICATIONS
83 !!    -------------
84 !!      Original     31/12/94
85 !!      Modification 31/01/96 Possibility to initialize the atmospheric fields
86 !!                            with a FM file (V. Masson)
87 !!      Modification 01/08/97 opening of CINIFILE at the end of PREP_REAL_CASE
88 !!                            (V. Masson)
89 !!      Modification 15/10/01 allow namelists in different orders (I. Mallet)
90 !!      J.ESCOBAR    12/11/2008  Improve checking --> add STATUS=OLD in open_ll(PRE_REAL1.nam,...
91 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
92 !-------------------------------------------------------------------------------
93 !
94 !*       0.    DECLARATIONS
95 !              ------------
96 !
97 USE MODD_CONF  ! declaration modules
98 USE MODD_CONF_n
99 !JUAN Z_SPLITTING
100 USE MODD_CONFZ
101 !JUAN Z_SPLITTING
102 USE MODD_LUNIT
103 USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD
104 !
105 !JUAN Z_SPLITTING
106 USE MODN_CONFZ
107 !JUAN Z_SPLITTING
108 USE MODN_CONFIO
109 !
110 USE MODE_POS
111 USE MODE_FM
112 USE MODE_IO_ll
113 !
114 IMPLICIT NONE
115 !
116 !*       0.1   Declaration of arguments
117 !              ------------------------
118 !
119 CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1   ! name of the PRE_REAL1 file
120 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
121 CHARACTER(LEN=6),  INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file
122 CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE    ! name of the input chemical file
123 CHARACTER(LEN=6),  INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file
124 CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE    ! name of the input surface file
125 CHARACTER(LEN=6),  INTENT(OUT) :: HSURFFILETYPE! type of the input surface file
126 CHARACTER(LEN=28), INTENT(OUT) :: HPGDFILE     ! name of the physiographic data file
127 !
128 !*       0.2   Declaration of local variables
129 !              ------------------------------
130 !
131 INTEGER :: IRESP      ! return-code if problems eraised
132 INTEGER :: IPRE_REAL1 ! logical unit for file HPRE_REAL1
133 INTEGER :: ILUOUT0    ! logical unit for listing file
134 INTEGER :: ININAR     ! number of articles initially present in a FM file
135 LOGICAL :: GFOUND     ! Return code when searching namelist
136 INTEGER :: ILEN
137 CHARACTER(LEN=28) :: YFILE
138 !
139 CHARACTER(LEN=28) :: CINIFILE ! re-declaration of this model variable for namelist
140 !
141 !*       0.3   Declaration of namelists
142 !              ------------------------
143 !
144 NAMELIST/NAM_FILE_NAMES/ HATMFILE,HATMFILETYPE,HCHEMFILE,HCHEMFILETYPE, &
145                          HSURFFILE,HSURFFILETYPE,HPGDFILE,CINIFILE
146 !-------------------------------------------------------------------------------
147 !
148 !*       1.    SET DEFAULT NAMES
149 !              -----------------
150 !
151 HATMFILE='                            '
152 HATMFILETYPE='MESONH'
153 HCHEMFILE='                            '
154 HCHEMFILETYPE='MESONH'
155 HSURFFILE='                            '
156 HSURFFILETYPE='MESONH'
157 HPRE_REAL1='PRE_REAL1.nam               '
158 CLUOUT0   ='OUTPUT_LISTING0             '
159 CLUOUT = CLUOUT0
160 !
161 !-------------------------------------------------------------------------------
162 !
163 !*       2.    OPENNING OF THE OUTPUT LISTING FILE
164 !              -----------------------------------
165 !
166 CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
167      MODE=GLOBAL)
168 !
169 IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
170 !-------------------------------------------------------------------------------
171 !
172 !*       3.    OPENNING OF PRE_REAL1.nam
173 !              -------------------------
174 !
175 CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
176      DELIM='QUOTE',MODE=GLOBAL,STATUS='OLD')
177 IF (IRESP.NE.0 ) THEN
178    PRINT "(' STOP :: Routine OPEN_PRC_FILES :: IRESP=',I6,' --> file PRE_REAL1.nam not found ')", IRESP
179    !callabortstop
180    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
181    CALL ABORT
182    STOP
183 ENDIF
184 !
185 !-------------------------------------------------------------------------------
186 !
187 !*       4.    READING THE OTHER FILE NAMES
188 !              ----------------------------
189 !
190 !JUANZ
191 CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
192 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
193 !JUANZ
194 CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
195 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
196 CALL SET_CONFIO_ll(LCDF4, LLFIOUT, LLFIREAD)
197 !
198 CINIFILE = CINIFILE_n
199 CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
200 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_FILE_NAMES)
201 CINIFILE_n = CINIFILE
202 !
203 ILEN = LEN_TRIM(HATMFILE)
204 IF (ILEN>0) THEN
205   YFILE='                            '
206   YFILE(1:ILEN) = HATMFILE(1:ILEN)
207   HATMFILE = '                            '
208   HATMFILE(1:ILEN) = YFILE(1:ILEN)
209 END IF
210 WRITE(ILUOUT0,*) 'HATMFILE= ', HATMFILE
211 !
212 ILEN = LEN_TRIM(HCHEMFILE)
213 IF (ILEN>0) THEN
214   YFILE='                            '
215   YFILE(1:ILEN) = HCHEMFILE(1:ILEN)
216   HCHEMFILE = '                            '
217   HCHEMFILE(1:ILEN) = YFILE(1:ILEN)
218   IF (HCHEMFILE==HATMFILE) HCHEMFILE=''
219 END IF
220 IF (LEN_TRIM(HCHEMFILE)>0 .AND. HATMFILETYPE/='GRIBEX') THEN
221   WRITE(ILUOUT0,*) 'Additional CHEMical file is only possible when ATMospheric file is of GRIBEX type'
222 !callabortstop
223   CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
224   CALL ABORT
225   STOP
226 END IF
227 WRITE(ILUOUT0,*) 'HCHEMFILE=', HCHEMFILE
228 !
229 ILEN = LEN_TRIM(HSURFFILE)
230 IF (ILEN>0) THEN
231   YFILE='                            '
232   YFILE(1:ILEN) = HSURFFILE(1:ILEN)
233   HSURFFILE = '                            '
234   HSURFFILE(1:ILEN) = YFILE(1:ILEN)
235 ELSE
236   HSURFFILE = HATMFILE
237   HSURFFILETYPE = HATMFILETYPE
238 END IF
239 WRITE(ILUOUT0,*) 'HSURFFILE=', HSURFFILE
240 !
241 ILEN = LEN_TRIM(HPGDFILE)
242 IF (ILEN>0) THEN
243   YFILE='                            '
244   YFILE(1:ILEN) = HPGDFILE(1:ILEN)
245   HPGDFILE = '                            '
246   HPGDFILE(1:ILEN) = YFILE(1:ILEN)
247 END IF
248 !
249 CINIFILEPGD_n = HPGDFILE
250 IF (LEN_TRIM(HPGDFILE)==0) THEN
251 !  IF (HATMFILETYPE=='MESONH') THEN
252 !    HPGDFILE = HATMFILE
253 !    WRITE(ILUOUT0,*) 'HPGDFILE set to ', HPGDFILE
254 !  ELSE
255     WRITE(ILUOUT0,*) 'You need the HPGDFILE file when starting from a large-scale file'
256     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
257     CALL ABORT
258     STOP
259 !  END IF
260 ELSE
261 !-------------------------------------------------------------------------------
262 !
263 !*       5.    OPENNING THE PHYSIOGRAPHIC DATA FILE
264 !              ------------------------------------
265 !
266   CALL FMOPEN_ll(HPGDFILE,'READ',CLUOUT0,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.)
267   IF (IRESP/=0) THEN
268     WRITE(ILUOUT0,*) 'STOP: problem during opening of PGD file ',HPGDFILE
269 !callabortstop
270     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
271     CALL ABORT
272     STOP
273   END IF
274 END IF
275 !
276 WRITE(ILUOUT0,*) 'HPGDFILE= ', HPGDFILE
277 !-------------------------------------------------------------------------------
278 !
279 !*       6.    INPUT ATMOSPHERIC FILE
280 !              ----------------------
281 !
282 !*       6.1   ATTRIBUTION OF LOGICAL UNITS TO ALADIN FILES
283 !              --------------------------------------------
284 !
285 !  because of new parallel IO, FMATTR must be called just before opening the Aladin file
286 !
287 !*       6.2   OPENNING INPUT MESONH FILE
288 !              --------------------------
289 !
290 !  done during INIT
291 !
292 !-------------------------------------------------------------------------------
293 !
294 WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES completed'
295 !
296 END SUBROUTINE OPEN_PRC_FILES