Juan 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
[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 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
76 !-------------------------------------------------------------------------------
77 !
78 !*       0.     DECLARATIONS
79 !               ------------
80 !
81 !  
82 !*       0.1    Declarative modules common to all the models
83 !
84 USE MODD_CONF
85 USE MODD_CST
86 USE MODD_DYN
87 USE MODD_GRID
88 USE MODD_LUNIT
89 USE MODD_PARAMETERS
90 USE MODD_REF
91 USE MODD_SPAWN
92 USE MODN_BLANK
93 USE MODD_NSV
94 USE MODN_CONFZ
95 !  
96 !*       0.2    Declarative modules of model 1
97 !
98 USE MODD_CONF_n
99 USE MODD_CURVCOR_n
100 USE MODD_DIM_n
101 USE MODD_DYN_n, LRES_n=>LRES, XRES_n=>XRES 
102 USE MODD_FIELD_n
103 USE MODD_LSFIELD_n
104 USE MODD_LBC_n
105 USE MODD_LUNIT_n
106 USE MODD_OUT_n
107 USE MODD_PARAM_n
108 USE MODD_REF_n
109 USE MODD_TIME_n
110 USE MODD_CH_MNHC_n
111
112 USE MODE_IO_ll
113 USE MODE_ll
114 USE MODE_POS
115 USE MODE_FM
116 USE MODE_MODELN_HANDLER
117 !
118 USE MODI_SPAWN_MODEL2    
119 USE MODI_BOUNDARIES
120 !
121 USE MODI_VERSION
122 USE MODI_INIT_MNH
123 USE MODI_DEALLOC_SURFEX
124 USE MODE_MPPDB
125 !
126 !
127 USE MODN_CONF, ONLY : JPHEXT , NHALO
128 !
129 USE MODE_MPPDB
130 !
131 IMPLICIT NONE
132 !
133 !*       0.3    Local variables
134 !
135 !
136 CHARACTER (LEN=28) :: YSONFILE = ' '  ! possible name of SON input FM-file
137 CHARACTER (LEN=28) :: YSPAFILE = ' '  ! possible name of the output FM-file
138 CHARACTER (LEN= 2) :: YSPANBR = '00'  ! NumBeR associated to the SPAwned file
139 INTEGER            :: IINFO_ll        ! return code of // routines
140 INTEGER :: IRESP                      ! Return codes in FM routines
141 INTEGER :: ILUSPA,ILUOUT              ! Logical unit number for the EXSPA file
142 CHARACTER (LEN=32) :: YEXSPA          ! Name of the EXSPA file
143 LOGICAL :: GFOUND                     ! Return code when searching namelist
144 !
145 LOGICAL :: LSPAWN_SURF = .TRUE.  ! .TRUE. : surface fields are spawned
146 LOGICAL                           :: LRES
147 REAL                              :: XRES
148 NAMELIST/NAM_SPAWN_SURF/LSPAWN_SURF, LRES, XRES  
149 NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO
150 !
151 !-------------------------------------------------------------------------------
152 !
153 CALL MPPDB_INIT()
154 !
155 ! First Switch to model 1 variables
156 CALL GOTO_MODEL(1)
157 !
158 CALL VERSION
159 CPROGRAM='SPAWN '
160 CDOMAIN= ''
161 !
162 CALL INITIO_ll()
163 !-------------------------------------------------------------------------------
164 !
165 !*       1.    SPAWNING INITIALIZATION 
166 !              -----------------------
167 !
168 CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
169                 NXOR,NYOR,NXSIZE,NYSIZE,NDXRATIO,NDYRATIO, &
170                 LBAL_ONLY, &
171                 CDOMAIN,YSPAFILE,YSPANBR,CDADINIFILE,CDADSPAFILE,YSONFILE)
172 !
173 !
174 !*       2.    NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE
175 !              ----------------------------------------
176 !
177 YEXSPA  = 'SPAWN1.nam'
178 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
179              form='FORMATTED',position="REWIND",mode=GLOBAL) 
180 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
181 !
182 CALL INIT_NMLVAR
183 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
184 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
185 CALL UPDATE_MODD_FROM_NMLVAR
186 CALL POSNAM(ILUSPA,'NAM_BLANK',GFOUND)
187 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_BLANK)
188 CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
189 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
190 CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
191 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
192 CALL CLOSE_ll(YEXSPA)
193 !
194 !-------------------------------------------------------------------------------
195 !
196 !*       3.    MODEL 1 INITIALIZATION
197 !              ----------------------
198 !
199 CALL INIT_MNH
200 !
201 CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT,IRESP)
202 CALL FMCLOS_ll(CINIFILEPGD,'KEEP',CLUOUT,IRESP,OPARALLELIO=.FALSE.)
203 !-------------------------------------------------------------------------------
204 !
205 !*       4.    INITIALIZATION OF OUTER POINTS OF MODEL 1
206 !              -----------------------------------------
207 !
208 CALL BOUNDARIES                                                     & 
209            (XTSTEP,CLBCX,CLBCY,NRR,NSV,1,                           &
210             XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
211             XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,   &
212             XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,   &
213             XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS,   &
214             XRHODJ,                                                 &
215             XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT            )
216 CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
217 !
218 !-------------------------------------------------------------------------------
219 !
220 !*       5.    SPAWNING OF MODEL 2 FROM MODEL 1
221 !              --------------------------------
222 !
223 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
224              form='FORMATTED',position="REWIND",mode=GLOBAL)
225 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
226 CALL GOTO_MODEL(2)
227 CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
228 CALL INIT_NMLVAR
229 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
230 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
231 CALL UPDATE_MODD_FROM_NMLVAR
232 CALL GOTO_MODEL(1)
233 CALL CLOSE_ll(YEXSPA)
234 !
235 CALL GO_TOMODEL_ll(2,IINFO_ll)
236 !
237 CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
238                    CCHEM_INPUT_FILE,YSPAFILE,YSPANBR,YSONFILE,          &
239                    CINIFILE, CINIFILEPGD, LSPAWN_SURF                   )
240 !
241 CALL DEALLOC_SURFEX
242 CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
243 CALL END_PARA_ll(IINFO_ll)
244 !JUAN CALL ABORT
245 STOP
246
247 CONTAINS 
248
249 SUBROUTINE INIT_NMLVAR
250 LRES=LRES_n
251 XRES=XRES_n
252 END SUBROUTINE INIT_NMLVAR
253
254 SUBROUTINE UPDATE_MODD_FROM_NMLVAR
255 LRES_n=LRES
256 XRES_n=XRES
257 END SUBROUTINE UPDATE_MODD_FROM_NMLVAR
258 !
259 !-------------------------------------------------------------------------------
260 !
261 END PROGRAM SPAWNING