Juan 2/03/2016 : bypass , reset NHALO=1 for SPAWNING
[MNH-git_open_source-lfs.git] / src / MNH / init_mnh.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$
9 ! masdev4_7 BUG1 2007/06/15 17:47:18
10 !-----------------------------------------------------------------
11 !     ###############
12       SUBROUTINE INIT_MNH
13 !     ###############
14 !
15 !!****  *INIT_MNH * - monitor to initialize the variables of the model
16 !!
17 !!    PURPOSE
18 !!    -------
19 !       The purpose of this routine is to initialize all the variables
20 !     used in the  model temporal loop or in the post-processings
21 !
22 !!**  METHOD
23 !!    ------
24 !!      This initialization  is separated in three parts :
25 !!         1. A part common to all models where :
26 !!            - The output-listing file common to all models is opened.
27 !!            - The physical constants are initialized.
28 !!            - The other constants for all models are initialized.
29 !!         2. The treatment of descriptor files model by model :
30 !!             The DESFM and EXSEG files are read and the EXSEG file is updated
31 !!         3. The sequential initialization of  nested models :
32 !!             The initial data fields are read in different files for each
33 !!             model and  variables which are not in these initial files are
34 !!             deduced.
35 !!
36 !!
37 !!    EXTERNAL
38 !!    --------
39 !!      INI_CST    : to initialize physical constants
40 !!      INI_CTURB  : to initialize for all models the constants used in the
41 !!                   turbulence scheme
42 !!      INI_SEG_n  : to read and update descriptor files  
43 !!      INI_SIZE   : to initialize the sizes of the different models
44 !!      INI_MODEL  : to initialize each nested model
45 !!      INI_PARA_ll: to build the ll data structures
46 !!      GO_TOMODEL : displace the ll lists to the right nested model
47 !!
48 !!
49 !!    IMPLICIT ARGUMENTS
50 !!    ------------------
51 !!      Module MODD_PARAMETERS : JPMODELMAX
52 !!
53 !!      Module MODD_CONF       : NMODEL,NVERB
54 !!
55 !!      Module MODD_LUNIT      : CLUOUT0
56 !!
57 !!    REFERENCE
58 !!    ---------
59 !!      Book2 of documentation (routine INIT_MNH)
60 !!
61 !!
62 !!    AUTHOR
63 !!    ------
64 !!      V. Ducrocq       * Meteo France *
65 !!
66 !!    MODIFICATIONS
67 !!    -------------
68 !!      Original    02/06/94
69 !!      J.Stein     05/01/95  add ini_cturb
70 !!      J.P. Lafore 18/08/95  Time STEP change
71 !!      J.P. Lafore 22/07/96  ZTSTEP_ALL introduction for nesting
72 !!      V. Ducrocq  7/08/98   //
73 !!      P. Jabouille 7/07/99  split ini_modeln in 2 parts+ cleaning
74 !!      V. Masson   15/03/99  call to ini_data_cover
75 !!      P.Jabouille 15/07/99  special initialisation for spawning
76 !!      J.P Chaboureau 2015   add ini_spectre_n
77 !!      J.Escoabr   2/03/2016 bypass , reset NHALO=1 for SPAWNING
78 !-------------------------------------------------------------------------------
79 !
80 !*       0.    DECLARATIONS
81 !              ------------
82 USE MODD_PARAMETERS
83 USE MODD_CONF
84 USE MODD_LUNIT
85 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
86 USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
87 !
88 USE MODE_IO_ll
89 USE MODE_ll
90 USE MODE_FM
91 !
92 USE MODI_INI_CST
93 USE MODI_INI_CTURB
94 USE MODI_INI_SEG_n
95 USE MODI_INI_MODEL_n
96 USE MODI_INI_SPECTRE_n
97 USE MODI_INI_SIZE_n
98 USE MODI_INI_SIZE_SPAWN
99 USE MODI_RESET_EXSEG
100 USE MODE_MODELN_HANDLER
101 USE MODI_READ_ALL_NAMELISTS
102 USE MODI_ALLOC_SURFEX
103 USE MODI_INI_SPECTRE_n
104 !JUAN
105 USE MODE_SPLITTINGZ_ll
106 !JUAN
107 !
108 IMPLICIT NONE
109 !
110 !*       0.1   Local variables
111 !
112 INTEGER :: JMI                                        !  Loop index
113 CHARACTER (LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT   ! Name for output-listing
114                                                       ! of nested models
115 CHARACTER (LEN=28), DIMENSION(JPMODELMAX) :: YINIFILE ! names of
116                                                       ! the initial files
117 CHARACTER (LEN=28), DIMENSION(JPMODELMAX) :: YINIFILEPGD                                                     
118 INTEGER  :: ILUOUT0,IRESP                             ! Logical unit number for
119                                                       ! output-listing common
120                                                       ! to all models and return
121                                                       ! code of file management
122 REAL, DIMENSION(JPMODELMAX)            :: ZTSTEP_ALL  ! Time STEP of ALL models
123 INTEGER                                :: IINFO_ll    ! return code of // routines
124 !
125 ! Dummy pointers needed to correct an ifort Bug
126 CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
127
128 !-------------------------------------------------------------------------------
129 !
130 !*       1.    INITIALIZATION  COMMON TO ALL MODELS
131 !              ------------------------------------
132 !
133 !*       1.1   initialize // E/S and open  output-listing file
134 !
135 !
136 IF (CPROGRAM/='REAL  ') THEN
137   CLUOUT0 = 'OUTPUT_LISTING0'
138   CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED', &
139                ACTION='WRITE',MODE=GLOBAL)
140 ELSE
141   CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
142 END IF
143 !
144 WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/,                  &
145                   &  7('*'),10X, ' MESO-NH MODEL ',10X,8('*'),/,   &
146                   & '*',48X,'*',/,                                 &
147                   & 7('*'),12X,' CNRM - LA ',12X,8('*'),/,         &
148                   & '*',48X,'*',/,  50('*'))")
149 !
150 !
151 !*      1.2   initialize physical constants
152 !
153 CALL INI_CST
154 !
155 !
156 !*       1.3    initialize constants for the turbulence scheme                      
157 !
158 CALL INI_CTURB                      
159 !
160 !
161 !*       1.4    initialize constants for nebulosity computation                            
162 !
163 CALL INI_NEB
164 !
165 !-------------------------------------------------------------------------------
166 !
167 !*       2.    READ AND UPDATE DESCRIPTOR FILES
168 !              --------------------------------
169 !
170 DO JMI=1,JPMODELMAX
171   CALL GOTO_MODEL(JMI)
172   CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL)
173   IF (JMI.EQ.NMODEL) EXIT
174 END DO
175 IF (CPROGRAM=='SPAWN ') THEN 
176   !bypass
177   NHALO = 1
178 END IF
179 !
180 IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1))
181 !
182 !-------------------------------------------------------------------------------
183 !
184 !
185 !*       3.    INITIALIZE EACH MODEL SIZES AND DEPENDENCY
186 !              ------------------------------------------
187 !
188 DO JMI=1,NMODEL
189   CALL GOTO_MODEL(JMI)
190   CALL INI_SIZE_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI))
191 END DO
192 !
193 IF (CPROGRAM=='SPAWN ') THEN 
194   DPTR_CLBCX=>CLBCX
195   DPTR_CLBCY=>CLBCY
196   CALL INI_PARAZ_ll(IINFO_ll)
197   CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,YINIFILE(1))
198 END IF
199 !
200 !   INITIALIZE data structures of ComLib
201 !
202 !JUAN CALL INI_PARA_ll(IINFO_ll)
203 CALL INI_PARAZ_ll(IINFO_ll)
204 !
205 !-------------------------------------------------------------------------------
206 !
207 !
208 CALL ALLOC_SURFEX(NMODEL)
209 !
210 IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') THEN 
211   CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
212 ELSE
213   CALL READ_ALL_NAMELISTS('MESONH','ALL',.TRUE.)
214 ENDIF
215 !
216 !
217 !-------------------------------------------------------------------------------
218 !
219 !*       4.    INITIALIZE EACH MODEL
220 !              ---------------------
221 !
222 DO JMI=1,NMODEL
223   CALL GO_TOMODEL_ll(JMI,IINFO_ll)
224   CALL GOTO_MODEL(JMI)
225   IF (CPROGRAM/='SPEC  ') THEN
226     CALL INI_MODEL_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI))
227   ELSE
228     CALL INI_SPECTRE_n(JMI,YLUOUT(JMI),YINIFILE(JMI))
229   END IF  
230 END DO
231 !
232 !-------------------------------------------------------------------------------
233 !
234 !*       5.    WRITE MESSAGE ON OUTPUT-LISTING
235 !              -------------------------------
236 !
237 IF (NVERB >= 5) THEN
238   WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/,                &
239                 & '*',10X,' INITIALIZATION TERMINATED',10X,'*',/,  &
240                 & '*',48X,'*',/,50('*'))")
241 END IF
242 !
243 !-------------------------------------------------------------------------------
244 !
245 !
246 END SUBROUTINE INIT_MNH