8840ddea03351aefc6c2302253f6d5664cdecac7
[MNH-git_open_source-lfs.git] / src / MNH / spawning.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 ! $Source$ $Revision$ $Date$
6 !-----------------------------------------------------------------
7 !     ################
8       PROGRAM SPAWNING
9 !     ################
10 !
11 !!****  *SPAWNING * -general monitor to spawn a model from an other one.
12 !!
13 !!    PURPOSE
14 !!    -------
15 !! 
16 !!      This program is the general monitor to spawn a model. Firstly, it calls
17 !!    the subroutine INIT, which performs the initialization of the model 1.
18 !!      The domain size and configuration of model 2 are initialized in
19 !!     INIT before the data structures of ComLib set up.
20 !!      Then, the program calls the subroutine SPAWN_MODEL2, which initializes
21 !!    by horizontal interpolation, the model 2 in a sub-domain of model 1, 
22 !!    and writes the resulting fields in a FM-file.
23 !!
24 !!
25 !!**  METHOD
26 !!    ------
27 !!     
28 !!
29 !!    EXTERNAL
30 !!    --------
31 !!
32 !!       subroutine INIT      : performs the initialization of the model 1
33 !!
34 !!       subroutine SPAWN_MODEL2 : performs horizontal interpolation and writes
35 !!                                 FM-file   
36 !!
37 !!
38 !! 
39 !!    IMPLICIT ARGUMENTS
40 !!    ------------------ 
41 !!
42 !!    NONE
43 !!
44 !!    REFERENCE
45 !!    ---------
46 !!
47 !!       NONE
48 !!      
49 !!
50 !!    AUTHOR
51 !!    ------
52 !!
53 !!       J.P. Lafore     * METEO-FRANCE *
54 !!
55 !!    MODIFICATIONS
56 !!    -------------
57 !!
58 !!      Original    10/01/95
59 !!      Modification 29/01/96  (Lafore) Update for MASDEV2_2 version
60 !!      Modification 19/03/96  (Lafore) Spawning for surface fields
61 !!      Modification 24/10/96  (Masson) Initialization of outer points
62 !!      Modification 19/11/96  (Masson) Add deep convection
63 !!      Modification 03/11/97  (Lafore) update of call to BOUNDARIES
64 !!      Modification 03/06/98  (Stein ) update of call to BOUNDARIES
65 !!      Modification 15/03/99  (Masson) call to READ_EXSPA and program name
66 !!      Modification 15/07/99  (Jabouille) create MODD_SPAWN
67 !!      Modification 14/12/00  (Jabouille) add NAM_BLANK reading
68 !!      Modification 15/10/01  (Mallet) allow namelists in different orders
69 !!      Modification 07/07/05  (Barbary) spawn with 2 input files (father+son1)
70 !!                                      to keep finest fields of son1
71 !!      Modification 05/06     Remove EPS
72 !!      Modification 19/03/2008 (J.Escobar) rename INIT to INIT_MNH --> grib problem
73 !!      Modification 05/02/2015 (M.Moge) read namelist NAM_CONFZ, before INIT_MNH
74 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
75 !-------------------------------------------------------------------------------
76 !
77 !*       0.     DECLARATIONS
78 !               ------------
79 !
80 !  
81 !*       0.1    Declarative modules common to all the models
82 !
83 USE MODD_CONF
84 USE MODD_CST
85 USE MODD_DYN
86 USE MODD_GRID
87 USE MODD_LUNIT
88 USE MODD_PARAMETERS
89 USE MODD_REF
90 USE MODD_SPAWN
91 USE MODN_BLANK
92 USE MODD_NSV
93 USE MODN_CONFZ
94 !  
95 !*       0.2    Declarative modules of model 1
96 !
97 USE MODD_CONF_n
98 USE MODD_CURVCOR_n
99 USE MODD_DIM_n
100 USE MODD_DYN_n, LRES_n=>LRES, XRES_n=>XRES 
101 USE MODD_FIELD_n
102 USE MODD_LSFIELD_n
103 USE MODD_LBC_n
104 USE MODD_LUNIT_n
105 USE MODD_OUT_n
106 USE MODD_PARAM_n
107 USE MODD_REF_n
108 USE MODD_TIME_n
109 USE MODD_CH_MNHC_n
110
111 USE MODE_IO_ll
112 USE MODE_ll
113 USE MODE_POS
114 USE MODE_FM
115 USE MODE_MODELN_HANDLER
116 !
117 USE MODI_SPAWN_MODEL2    
118 USE MODI_BOUNDARIES
119 !
120 USE MODI_VERSION
121 USE MODI_INIT_MNH
122 USE MODI_DEALLOC_SURFEX
123 USE MODE_MPPDB
124 !
125 !
126 USE MODN_CONF, ONLY : JPHEXT , NHALO
127 !
128 USE MODE_MPPDB
129 !
130 IMPLICIT NONE
131 !
132 !*       0.3    Local variables
133 !
134 !
135 CHARACTER (LEN=28) :: YSONFILE = ' '  ! possible name of SON input FM-file
136 CHARACTER (LEN=28) :: YSPAFILE = ' '  ! possible name of the output FM-file
137 CHARACTER (LEN= 2) :: YSPANBR = '00'  ! NumBeR associated to the SPAwned file
138 INTEGER            :: IINFO_ll        ! return code of // routines
139 INTEGER :: IRESP                      ! Return codes in FM routines
140 INTEGER :: ILUSPA,ILUOUT              ! Logical unit number for the EXSPA file
141 CHARACTER (LEN=32) :: YEXSPA          ! Name of the EXSPA file
142 LOGICAL :: GFOUND                     ! Return code when searching namelist
143 !
144 LOGICAL :: LSPAWN_SURF = .TRUE.  ! .TRUE. : surface fields are spawned
145 LOGICAL                           :: LRES
146 REAL                              :: XRES
147 NAMELIST/NAM_SPAWN_SURF/LSPAWN_SURF, LRES, XRES  
148 NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO
149 !
150 !-------------------------------------------------------------------------------
151 !
152 CALL MPPDB_INIT()
153 !
154 ! First Switch to model 1 variables
155 CALL GOTO_MODEL(1)
156 !
157 CALL VERSION
158 CPROGRAM='SPAWN '
159 CDOMAIN= ''
160 !
161 CALL INITIO_ll()
162 !-------------------------------------------------------------------------------
163 !
164 !*       1.    SPAWNING INITIALIZATION 
165 !              -----------------------
166 !
167 CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
168                 NXOR,NYOR,NXSIZE,NYSIZE,NDXRATIO,NDYRATIO, &
169                 LBAL_ONLY, &
170                 CDOMAIN,YSPAFILE,YSPANBR,CDADINIFILE,CDADSPAFILE,YSONFILE)
171 !
172 !
173 !*       2.    NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE
174 !              ----------------------------------------
175 !
176 YEXSPA  = 'SPAWN1.nam'
177 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
178              form='FORMATTED',position="REWIND",mode=GLOBAL) 
179 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
180 !
181 CALL INIT_NMLVAR
182 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
183 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
184 CALL UPDATE_MODD_FROM_NMLVAR
185 CALL POSNAM(ILUSPA,'NAM_BLANK',GFOUND)
186 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_BLANK)
187 CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
188 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
189 CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
190 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
191 CALL CLOSE_ll(YEXSPA)
192 !
193 !-------------------------------------------------------------------------------
194 !
195 !*       3.    MODEL 1 INITIALIZATION
196 !              ----------------------
197 !
198 CALL INIT_MNH
199 !
200 CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT,IRESP)
201 CALL FMCLOS_ll(CINIFILEPGD,'KEEP',CLUOUT,IRESP)
202 !-------------------------------------------------------------------------------
203 !
204 !*       4.    INITIALIZATION OF OUTER POINTS OF MODEL 1
205 !              -----------------------------------------
206 !
207 CALL BOUNDARIES                                                     & 
208            (XTSTEP,CLBCX,CLBCY,NRR,NSV,1,                           &
209             XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
210             XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,   &
211             XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,   &
212             XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS,   &
213             XRHODJ,                                                 &
214             XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT            )
215 CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
216 !
217 !-------------------------------------------------------------------------------
218 !
219 !*       5.    SPAWNING OF MODEL 2 FROM MODEL 1
220 !              --------------------------------
221 !
222 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
223              form='FORMATTED',position="REWIND",mode=GLOBAL)
224 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
225 CALL GOTO_MODEL(2)
226 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
227 CALL INIT_NMLVAR
228 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
229 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
230 CALL UPDATE_MODD_FROM_NMLVAR
231 CALL GOTO_MODEL(1)
232 CALL CLOSE_ll(YEXSPA)
233 !
234 CALL GO_TOMODEL_ll(2,IINFO_ll)
235 !
236 CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
237                    CCHEM_INPUT_FILE,YSPAFILE,YSPANBR,YSONFILE,          &
238                    CINIFILE, CINIFILEPGD, LSPAWN_SURF                   )
239 !
240 CALL DEALLOC_SURFEX
241 CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
242 CALL END_PARA_ll(IINFO_ll)
243 !JUAN CALL ABORT
244 STOP
245
246 CONTAINS 
247
248 SUBROUTINE INIT_NMLVAR
249 LRES=LRES_n
250 XRES=XRES_n
251 END SUBROUTINE INIT_NMLVAR
252
253 SUBROUTINE UPDATE_MODD_FROM_NMLVAR
254 LRES_n=LRES
255 XRES_n=XRES
256 END SUBROUTINE UPDATE_MODD_FROM_NMLVAR
257 !
258 !-------------------------------------------------------------------------------
259 !
260 END PROGRAM SPAWNING