f6f079048dc268e34a1967a1ff48face5e9a37b6
[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 !-------------------------------------------------------------------------------
78 !
79 !*       0.    DECLARATIONS
80 !              ------------
81 USE MODD_PARAMETERS
82 USE MODD_CONF
83 USE MODD_LUNIT
84 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
85 USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
86 !
87 USE MODE_IO_ll
88 USE MODE_ll
89 USE MODE_FM
90 !
91 USE MODI_INI_CST
92 USE MODI_INI_CTURB
93 USE MODI_INI_SEG_n
94 USE MODI_INI_MODEL_n
95 USE MODI_INI_SPECTRE_n
96 USE MODI_INI_SIZE_n
97 USE MODI_INI_SIZE_SPAWN
98 USE MODI_RESET_EXSEG
99 USE MODE_MODELN_HANDLER
100 USE MODI_READ_ALL_NAMELISTS
101 USE MODI_ALLOC_SURFEX
102 USE MODI_INI_SPECTRE_n
103 !JUAN
104 USE MODE_SPLITTINGZ_ll
105 !JUAN
106 !
107 IMPLICIT NONE
108 !
109 !*       0.1   Local variables
110 !
111 INTEGER :: JMI                                        !  Loop index
112 CHARACTER (LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT   ! Name for output-listing
113                                                       ! of nested models
114 CHARACTER (LEN=28), DIMENSION(JPMODELMAX) :: YINIFILE ! names of
115                                                       ! the initial files
116 CHARACTER (LEN=28), DIMENSION(JPMODELMAX) :: YINIFILEPGD                                                     
117 INTEGER  :: ILUOUT0,IRESP                             ! Logical unit number for
118                                                       ! output-listing common
119                                                       ! to all models and return
120                                                       ! code of file management
121 REAL, DIMENSION(JPMODELMAX)            :: ZTSTEP_ALL  ! Time STEP of ALL models
122 INTEGER                                :: IINFO_ll    ! return code of // routines
123 !
124 ! Dummy pointers needed to correct an ifort Bug
125 CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
126
127 !-------------------------------------------------------------------------------
128 !
129 !*       1.    INITIALIZATION  COMMON TO ALL MODELS
130 !              ------------------------------------
131 !
132 !*       1.1   initialize // E/S and open  output-listing file
133 !
134 !
135 IF (CPROGRAM/='REAL  ') THEN
136   CLUOUT0 = 'OUTPUT_LISTING0'
137   CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED', &
138                ACTION='WRITE',MODE=GLOBAL)
139 ELSE
140   CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
141 END IF
142 !
143 WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/,                  &
144                   &  7('*'),10X, ' MESO-NH MODEL ',10X,8('*'),/,   &
145                   & '*',48X,'*',/,                                 &
146                   & 7('*'),12X,' CNRM - LA ',12X,8('*'),/,         &
147                   & '*',48X,'*',/,  50('*'))")
148 !
149 !
150 !*      1.2   initialize physical constants
151 !
152 CALL INI_CST
153 !
154 !
155 !*       1.3    initialize constants for the turbulence scheme                      
156 !
157 CALL INI_CTURB                      
158 !
159 !
160 !*       1.4    initialize constants for nebulosity computation                            
161 !
162 CALL INI_NEB
163 !
164 !-------------------------------------------------------------------------------
165 !
166 !*       2.    READ AND UPDATE DESCRIPTOR FILES
167 !              --------------------------------
168 !
169 DO JMI=1,JPMODELMAX
170   CALL GOTO_MODEL(JMI)
171   CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL)
172   IF (JMI.EQ.NMODEL) EXIT
173 END DO
174 !
175 IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1))
176 !
177 !-------------------------------------------------------------------------------
178 !
179 !
180 !*       3.    INITIALIZE EACH MODEL SIZES AND DEPENDENCY
181 !              ------------------------------------------
182 !
183 DO JMI=1,NMODEL
184   CALL GOTO_MODEL(JMI)
185   CALL INI_SIZE_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI))
186 END DO
187 !
188 IF (CPROGRAM=='SPAWN ') THEN 
189   DPTR_CLBCX=>CLBCX
190   DPTR_CLBCY=>CLBCY
191   CALL INI_PARAZ_ll(IINFO_ll)
192   CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,YINIFILE(1))
193 END IF
194 !
195 !   INITIALIZE data structures of ComLib
196 !
197 !JUAN CALL INI_PARA_ll(IINFO_ll)
198 CALL INI_PARAZ_ll(IINFO_ll)
199 !
200 !-------------------------------------------------------------------------------
201 !
202 !
203 CALL ALLOC_SURFEX(NMODEL)
204 !
205 IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') THEN 
206   CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
207 ELSE
208   CALL READ_ALL_NAMELISTS('MESONH','ALL',.TRUE.)
209 ENDIF
210 !
211 !
212 !-------------------------------------------------------------------------------
213 !
214 !*       4.    INITIALIZE EACH MODEL
215 !              ---------------------
216 !
217 DO JMI=1,NMODEL
218   CALL GO_TOMODEL_ll(JMI,IINFO_ll)
219   CALL GOTO_MODEL(JMI)
220   IF (CPROGRAM/='SPEC  ') THEN
221     CALL INI_MODEL_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI))
222   ELSE
223     CALL INI_SPECTRE_n(JMI,YLUOUT(JMI),YINIFILE(JMI))
224   END IF  
225 END DO
226 !
227 !-------------------------------------------------------------------------------
228 !
229 !*       5.    WRITE MESSAGE ON OUTPUT-LISTING
230 !              -------------------------------
231 !
232 IF (NVERB >= 5) THEN
233   WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/,                &
234                 & '*',10X,' INITIALIZATION TERMINATED',10X,'*',/,  &
235                 & '*',48X,'*',/,50('*'))")
236 END IF
237 !
238 !-------------------------------------------------------------------------------
239 !
240 !
241 END SUBROUTINE INIT_MNH