587f257b1cb6dd76fa5343cc62ad6931434d6a5d
[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 !-------------------------------------------------------------------------------
92 !
93 !*       0.    DECLARATIONS
94 !              ------------
95 !
96 USE MODD_CONF  ! declaration modules
97 USE MODD_CONF_n
98 !JUAN Z_SPLITTING
99 USE MODD_CONFZ
100 !JUAN Z_SPLITTING
101 USE MODD_LUNIT
102 USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD
103 !
104 !JUAN Z_SPLITTING
105 USE MODN_CONFZ
106 !JUAN Z_SPLITTING
107 USE MODN_CONFIO
108 !
109 USE MODE_POS
110 USE MODE_FM
111 USE MODE_IO_ll
112 !
113 IMPLICIT NONE
114 !
115 !*       0.1   Declaration of arguments
116 !              ------------------------
117 !
118 CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1   ! name of the PRE_REAL1 file
119 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
120 CHARACTER(LEN=6),  INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file
121 CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE    ! name of the input chemical file
122 CHARACTER(LEN=6),  INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file
123 CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE    ! name of the input surface file
124 CHARACTER(LEN=6),  INTENT(OUT) :: HSURFFILETYPE! type of the input surface file
125 CHARACTER(LEN=28), INTENT(OUT) :: HPGDFILE     ! name of the physiographic data file
126 !
127 !*       0.2   Declaration of local variables
128 !              ------------------------------
129 !
130 INTEGER :: IRESP      ! return-code if problems eraised
131 INTEGER :: IPRE_REAL1 ! logical unit for file HPRE_REAL1
132 INTEGER :: ILUOUT0    ! logical unit for listing file
133 INTEGER :: ININAR     ! number of articles initially present in a FM file
134 LOGICAL :: GFOUND     ! Return code when searching namelist
135 INTEGER :: ILEN
136 CHARACTER(LEN=28) :: YFILE
137 !
138 CHARACTER(LEN=28) :: CINIFILE ! re-declaration of this model variable for namelist
139 !
140 !*       0.3   Declaration of namelists
141 !              ------------------------
142 !
143 NAMELIST/NAM_FILE_NAMES/ HATMFILE,HATMFILETYPE,HCHEMFILE,HCHEMFILETYPE, &
144                          HSURFFILE,HSURFFILETYPE,HPGDFILE,CINIFILE
145 !-------------------------------------------------------------------------------
146 !
147 !*       1.    SET DEFAULT NAMES
148 !              -----------------
149 !
150 HATMFILE='                            '
151 HATMFILETYPE='MESONH'
152 HCHEMFILE='                            '
153 HCHEMFILETYPE='MESONH'
154 HSURFFILE='                            '
155 HSURFFILETYPE='MESONH'
156 HPRE_REAL1='PRE_REAL1.nam               '
157 CLUOUT0   ='OUTPUT_LISTING0             '
158 CLUOUT = CLUOUT0
159 !
160 !-------------------------------------------------------------------------------
161 !
162 !*       2.    OPENNING OF THE OUTPUT LISTING FILE
163 !              -----------------------------------
164 !
165 CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
166      MODE=GLOBAL)
167 !
168 IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
169 !-------------------------------------------------------------------------------
170 !
171 !*       3.    OPENNING OF PRE_REAL1.nam
172 !              -------------------------
173 !
174 CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
175      DELIM='QUOTE',MODE=GLOBAL,STATUS='OLD')
176 IF (IRESP.NE.0 ) THEN
177    PRINT "(' STOP :: Routine OPEN_PRC_FILES :: IRESP=',I6,' --> file PRE_REAL1.nam not found ')", IRESP
178    !callabortstop
179    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
180    CALL ABORT
181    STOP
182 ENDIF
183 !
184 !-------------------------------------------------------------------------------
185 !
186 !*       4.    READING THE OTHER FILE NAMES
187 !              ----------------------------
188 !
189 !JUANZ
190 CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
191 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
192 !JUANZ
193 CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
194 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
195 CALL SET_CONFIO_ll(LCDF4, LLFIOUT, LLFIREAD)
196 !
197 CINIFILE = CINIFILE_n
198 CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
199 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_FILE_NAMES)
200 CINIFILE_n = CINIFILE
201 !
202 ILEN = LEN_TRIM(HATMFILE)
203 IF (ILEN>0) THEN
204   YFILE='                            '
205   YFILE(1:ILEN) = HATMFILE(1:ILEN)
206   HATMFILE = '                            '
207   HATMFILE(1:ILEN) = YFILE(1:ILEN)
208 END IF
209 WRITE(ILUOUT0,*) 'HATMFILE= ', HATMFILE
210 !
211 ILEN = LEN_TRIM(HCHEMFILE)
212 IF (ILEN>0) THEN
213   YFILE='                            '
214   YFILE(1:ILEN) = HCHEMFILE(1:ILEN)
215   HCHEMFILE = '                            '
216   HCHEMFILE(1:ILEN) = YFILE(1:ILEN)
217   IF (HCHEMFILE==HATMFILE) HCHEMFILE=''
218 END IF
219 IF (LEN_TRIM(HCHEMFILE)>0 .AND. HATMFILETYPE/='GRIBEX') THEN
220   WRITE(ILUOUT0,*) 'Additional CHEMical file is only possible when ATMospheric file is of GRIBEX type'
221 !callabortstop
222   CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
223   CALL ABORT
224   STOP
225 END IF
226 WRITE(ILUOUT0,*) 'HCHEMFILE=', HCHEMFILE
227 !
228 ILEN = LEN_TRIM(HSURFFILE)
229 IF (ILEN>0) THEN
230   YFILE='                            '
231   YFILE(1:ILEN) = HSURFFILE(1:ILEN)
232   HSURFFILE = '                            '
233   HSURFFILE(1:ILEN) = YFILE(1:ILEN)
234 ELSE
235   HSURFFILE = HATMFILE
236   HSURFFILETYPE = HATMFILETYPE
237 END IF
238 WRITE(ILUOUT0,*) 'HSURFFILE=', HSURFFILE
239 !
240 ILEN = LEN_TRIM(HPGDFILE)
241 IF (ILEN>0) THEN
242   YFILE='                            '
243   YFILE(1:ILEN) = HPGDFILE(1:ILEN)
244   HPGDFILE = '                            '
245   HPGDFILE(1:ILEN) = YFILE(1:ILEN)
246 END IF
247 !
248 CINIFILEPGD_n = HPGDFILE
249 IF (LEN_TRIM(HPGDFILE)==0) THEN
250 !  IF (HATMFILETYPE=='MESONH') THEN
251 !    HPGDFILE = HATMFILE
252 !    WRITE(ILUOUT0,*) 'HPGDFILE set to ', HPGDFILE
253 !  ELSE
254     WRITE(ILUOUT0,*) 'You need the HPGDFILE file when starting from a large-scale file'
255     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
256     CALL ABORT
257     STOP
258 !  END IF
259 ELSE
260 !-------------------------------------------------------------------------------
261 !
262 !*       5.    OPENNING THE PHYSIOGRAPHIC DATA FILE
263 !              ------------------------------------
264 !
265   CALL FMOPEN_ll(HPGDFILE,'READ',CLUOUT0,0,2,NVERB,ININAR,IRESP)
266   IF (IRESP/=0) THEN
267     WRITE(ILUOUT0,*) 'STOP: problem during opening of PGD file ',HPGDFILE
268 !callabortstop
269     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
270     CALL ABORT
271     STOP
272   END IF
273 END IF
274 !
275 WRITE(ILUOUT0,*) 'HPGDFILE= ', HPGDFILE
276 !-------------------------------------------------------------------------------
277 !
278 !*       6.    INPUT ATMOSPHERIC FILE
279 !              ----------------------
280 !
281 !*       6.1   ATTRIBUTION OF LOGICAL UNITS TO ALADIN FILES
282 !              --------------------------------------------
283 !
284 !  because of new parallel IO, FMATTR must be called just before opening the Aladin file
285 !
286 !*       6.2   OPENNING INPUT MESONH FILE
287 !              --------------------------
288 !
289 !  done during INIT
290 !
291 !-------------------------------------------------------------------------------
292 !
293 WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES completed'
294 !
295 END SUBROUTINE OPEN_PRC_FILES