Changeset 2625ca8 in flex_extract.git for documentation/Sphinx/build/html/_modules
- Timestamp:
- Jan 15, 2019, 1:03:37 AM (5 years ago)
- Branches:
- master, ctbto, dev
- Children:
- 6f951ca
- Parents:
- 0629ba8
- Location:
- documentation/Sphinx/build/html/_modules
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
documentation/Sphinx/build/html/_modules/ControlFile.html
r274f9ef r2625ca8 174 174 <span class="c1">#</span> 175 175 <span class="c1"># @License:</span> 176 <span class="c1"># (C) Copyright 2015-2018.</span> 176 <span class="c1"># (C) Copyright 2014-2019.</span> 177 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 177 178 <span class="c1">#</span> 178 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 179 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 179 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 180 <span class="c1"># International License. To view a copy of this license, visit</span> 181 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 182 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 180 183 <span class="c1">#</span> 181 <span class="c1"># @Class Description:</span> 182 <span class="c1"># The CONTROL file is the steering part of the FLEXPART extraction</span> 183 <span class="c1"># software. All necessary parameters needed to retrieve the data fields</span> 184 <span class="c1"># from the MARS archive for driving FLEXPART are set in a CONTROL file.</span> 185 <span class="c1"># Some specific parameters like the start and end dates can be overwritten</span> 186 <span class="c1"># by the command line parameters, but in generel all parameters needed</span> 187 <span class="c1"># for a complete set of fields for FLEXPART can be set in the CONTROL file.</span> 188 <span class="c1">#</span> 189 <span class="c1"># @Class Content:</span> 190 <span class="c1"># - __init__</span> 191 <span class="c1"># - __read_controlfile__</span> 192 <span class="c1"># - __str__</span> 193 <span class="c1"># - assign_args_to_control</span> 194 <span class="c1"># - assign_envs_to_control</span> 195 <span class="c1"># - check_conditions</span> 196 <span class="c1"># - check_install_conditions</span> 197 <span class="c1"># - to_list</span> 198 <span class="c1">#</span> 199 <span class="c1"># @Class Attributes:</span> 200 <span class="c1">#</span> 201 <span class="c1">#</span> 184 <span class="c1"># @Class Methods:</span> 185 <span class="c1"># __init__</span> 186 <span class="c1"># _read_controlfile</span> 187 <span class="c1"># __str__</span> 188 <span class="c1"># assign_args_to_control</span> 189 <span class="c1"># assign_envs_to_control</span> 190 <span class="c1"># check_conditions</span> 191 <span class="c1"># check_install_conditions</span> 192 <span class="c1"># to_list</span> 202 193 <span class="c1">#*******************************************************************************</span> 203 194 … … 209 200 <span class="kn">import</span> <span class="nn">sys</span> 210 201 <span class="kn">import</span> <span class="nn">inspect</span> 202 <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> 211 203 212 204 <span class="c1"># software specific classes and modules from flex_extract</span> … … 214 206 <span class="kn">import</span> <span class="nn">_config</span> 215 207 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">silent_remove</span> 208 <span class="kn">from</span> <span class="nn">mods.checks</span> <span class="k">import</span> <span class="p">(</span><span class="n">check_grid</span><span class="p">,</span> <span class="n">check_area</span><span class="p">,</span> <span class="n">check_levels</span><span class="p">,</span> <span class="n">check_purefc</span><span class="p">,</span> 209 <span class="n">check_step</span><span class="p">,</span> <span class="n">check_mail</span><span class="p">,</span> <span class="n">check_queue</span><span class="p">,</span> <span class="n">check_pathes</span><span class="p">,</span> 210 <span class="n">check_dates</span><span class="p">,</span> <span class="n">check_maxstep</span><span class="p">,</span> <span class="n">check_type</span><span class="p">,</span> <span class="n">check_request</span><span class="p">,</span> 211 <span class="n">check_basetime</span><span class="p">,</span> <span class="n">check_public</span><span class="p">,</span> <span class="n">check_acctype</span><span class="p">,</span> 212 <span class="n">check_acctime</span><span class="p">,</span> <span class="n">check_accmaxstep</span><span class="p">,</span> <span class="n">check_time</span><span class="p">,</span> 213 <span class="n">check_logicals_type</span><span class="p">,</span> <span class="n">check_len_type_time_step</span><span class="p">,</span> 214 <span class="n">check_addpar</span><span class="p">,</span> <span class="n">check_job_chunk</span><span class="p">)</span> 216 215 217 216 <span class="c1"># ------------------------------------------------------------------------------</span> … … 221 220 <span class="sd">'''</span> 222 221 <span class="sd"> Contains the information which are stored in the CONTROL files.</span> 222 223 <span class="sd"> The CONTROL file is the steering part of the FLEXPART extraction</span> 224 <span class="sd"> software. All necessary parameters needed to retrieve the data fields</span> 225 <span class="sd"> from the MARS archive for driving FLEXPART are set in a CONTROL file.</span> 226 <span class="sd"> Some specific parameters like the start and end dates can be overwritten</span> 227 <span class="sd"> by the command line parameters, but in generel all parameters needed</span> 228 <span class="sd"> for a complete set of fields for FLEXPART can be set in the CONTROL file.</span> 229 230 <span class="sd"> Attributes</span> 231 <span class="sd"> ----------</span> 232 <span class="sd"> controlfile : str</span> 233 <span class="sd"> The name of the control file to be processed. Default value is the</span> 234 <span class="sd"> filename passed to the init function when initialised.</span> 235 236 <span class="sd"> start_date : str</span> 237 <span class="sd"> The first day of the retrieval period. Default value is None.</span> 238 239 <span class="sd"> end_date :str</span> 240 <span class="sd"> The last day of the retrieval period. Default value is None.</span> 241 242 <span class="sd"> date_chunk : int</span> 243 <span class="sd"> Length of period for a single mars retrieval. Default value is 3.</span> 244 245 <span class="sd"> dtime :str</span> 246 <span class="sd"> The time step in hours. Default value is None.</span> 247 248 <span class="sd"> basetime : str</span> 249 <span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> 250 <span class="sd"> retrieved. Default value is None.</span> 251 252 <span class="sd"> maxstep : int</span> 253 <span class="sd"> The maximum forecast step for non flux data. Default value is None.</span> 254 255 <span class="sd"> type : list of str</span> 256 <span class="sd"> List of field type per retrieving hour. Default value is None.</span> 257 258 <span class="sd"> time : list of str</span> 259 <span class="sd"> List of retrieving times in hours. Default valuer is None.</span> 260 261 <span class="sd"> step : list of str or str</span> 262 <span class="sd"> List of forecast time steps in hours for non flux data.</span> 263 <span class="sd"> Default value is None.</span> 264 265 <span class="sd"> acctype : str</span> 266 <span class="sd"> The field type for the accumulated forecast fields.</span> 267 <span class="sd"> Default value is None.</span> 268 269 <span class="sd"> acctime : str</span> 270 <span class="sd"> The starting time of the accumulated forecasts. Default value is None.</span> 271 272 <span class="sd"> accmaxstep : int</span> 273 <span class="sd"> The maximum forecast step for the accumulated forecast fields</span> 274 <span class="sd"> (flux data). Default value is None.</span> 275 276 <span class="sd"> marsclass : str</span> 277 <span class="sd"> Characterisation of dataset. Default value is None.</span> 278 279 <span class="sd"> dataset : str</span> 280 <span class="sd"> For public datasets there is the specific naming and parameter</span> 281 <span class="sd"> dataset which has to be used to characterize the type of</span> 282 <span class="sd"> data. Default value is None.</span> 283 284 <span class="sd"> stream : str</span> 285 <span class="sd"> Identifies the forecasting system used to generate the data.</span> 286 <span class="sd"> Default value is None.</span> 287 288 <span class="sd"> number : str</span> 289 <span class="sd"> Selects the member in ensemble forecast run. Default value is 'OFF'.</span> 290 291 <span class="sd"> expver : str</span> 292 <span class="sd"> The version number of the dataset. Default value is '1'.</span> 293 294 <span class="sd"> gaussian : str</span> 295 <span class="sd"> This parameter is deprecated and should no longer be used.</span> 296 <span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> 297 <span class="sd"> Default value is an empty string ''.</span> 298 299 <span class="sd"> grid : str</span> 300 <span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> 301 <span class="sd"> or a Latitude/Longitude grid. Default value is None.</span> 302 303 <span class="sd"> area : str</span> 304 <span class="sd"> Specifies the desired sub-area of data to be extracted.</span> 305 <span class="sd"> Default value is None.</span> 306 307 <span class="sd"> left : str</span> 308 <span class="sd"> The western most longitude of the area to be extracted.</span> 309 <span class="sd"> Default value is None.</span> 310 311 <span class="sd"> lower : str</span> 312 <span class="sd"> The southern most latitude of the area to be extracted.</span> 313 <span class="sd"> Default value is None.</span> 314 315 <span class="sd"> upper : str</span> 316 <span class="sd"> The northern most latitued of the area to be extracted.</span> 317 <span class="sd"> Default value is None.</span> 318 319 <span class="sd"> right : str</span> 320 <span class="sd"> The eastern most longitude of the area to be extracted.</span> 321 <span class="sd"> Default value is None.</span> 322 323 <span class="sd"> level : str</span> 324 <span class="sd"> Specifies the maximum level. Default value is None.</span> 325 326 <span class="sd"> levelist : str</span> 327 <span class="sd"> Specifies the required level list. Default value is None.</span> 328 329 <span class="sd"> resol : str</span> 330 <span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> 331 <span class="sd"> before carrying out any other selected post-processing.</span> 332 <span class="sd"> Default value is None.</span> 333 334 <span class="sd"> gauss : int</span> 335 <span class="sd"> Switch to select gaussian fields (1) or regular lat/lon (0).</span> 336 <span class="sd"> Default value is 0.</span> 337 338 <span class="sd"> accuracy : int</span> 339 <span class="sd"> Specifies the number of bits per value to be used in the</span> 340 <span class="sd"> generated GRIB coded fields. Default value is 24.</span> 341 342 <span class="sd"> omega : int</span> 343 <span class="sd"> Switch to select omega retrieval (1) or not (0). Default value is 0.</span> 344 345 <span class="sd"> omegadiff : int</span> 346 <span class="sd"> Switch to decide to calculate Omega and Dps/Dt from continuity</span> 347 <span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> 348 349 <span class="sd"> eta : int</span> 350 <span class="sd"> Switch to select direct retrieval of etadot from MARS (1) or</span> 351 <span class="sd"> wether it has to be calculated (0). Then Default value is 0.</span> 352 353 <span class="sd"> etadiff : int</span> 354 <span class="sd"> Switch to select calculation of etadot and Dps/Dt from continuity</span> 355 <span class="sd"> equation for diagnostic purposes (1) or not (0). Default value is 0.</span> 356 357 <span class="sd"> etapar : int</span> 358 <span class="sd"> GRIB parameter Id for etadot fields. Default value is 77.</span> 359 360 <span class="sd"> dpdeta : int</span> 361 <span class="sd"> Switch to select multiplication of etadot with dpdeta.</span> 362 <span class="sd"> Default value is 1.</span> 363 364 <span class="sd"> smooth : int</span> 365 <span class="sd"> Spectral truncation of ETADOT after calculation on Gaussian grid.</span> 366 <span class="sd"> Default value is 0.</span> 367 368 <span class="sd"> format : str</span> 369 <span class="sd"> The format of the GRIB data. Default value is 'GRIB1'.</span> 370 371 <span class="sd"> addpar : str</span> 372 <span class="sd"> List of additional surface level ECMWF parameter to be retrieved.</span> 373 <span class="sd"> Default value is None.</span> 374 375 <span class="sd"> prefix : str</span> 376 <span class="sd"> Prefix string for the final FLEXPART/FLEXTRA ready input files.</span> 377 <span class="sd"> Default value is 'EN'.</span> 378 379 <span class="sd"> cwc : int</span> 380 <span class="sd"> Switch to select wether the sum of cloud liquid water content and</span> 381 <span class="sd"> cloud ice water content should be retrieved. Default value is 0.</span> 382 383 <span class="sd"> wrf : int</span> 384 <span class="sd"> Switch to select further parameters for retrievment to support</span> 385 <span class="sd"> WRF simulations. Default value is 0.</span> 386 387 <span class="sd"> ecfsdir : str</span> 388 <span class="sd"> Path to the ECMWF storage 'ectmp:/${USER}/econdemand/'</span> 389 390 <span class="sd"> mailfail : list of str</span> 391 <span class="sd"> Email list for sending error log files from ECMWF servers.</span> 392 <span class="sd"> The email addresses should be seperated by a comma.</span> 393 <span class="sd"> Default value is ['${USER}'].</span> 394 395 <span class="sd"> mailops : list of str</span> 396 <span class="sd"> Email list for sending operational log files from ECMWF servers.</span> 397 <span class="sd"> The email addresses should be seperated by a comma.</span> 398 <span class="sd"> Default value is ['${USER}'].</span> 399 400 <span class="sd"> grib2flexpart : int 0</span> 401 <span class="sd"> Switch to select generation of preprocessed FLEXPART files ".fp".</span> 402 <span class="sd"> If it is selected, the program grib2flexpart will try</span> 403 <span class="sd"> to convert the flex_extract output files into ".fp" format.</span> 404 405 <span class="sd"> ecstorage : int</span> 406 <span class="sd"> Switch to select storage of FLEXPART ready output files</span> 407 <span class="sd"> in the ECFS file system. Default value is 0.</span> 408 409 <span class="sd"> ectrans : int</span> 410 <span class="sd"> Switch to select the transfer of FLEXPART ready output files</span> 411 <span class="sd"> to the gateway server. Default value is 0.</span> 412 413 <span class="sd"> inputdir : str</span> 414 <span class="sd"> Path to the temporary directory for the retrieval grib files and</span> 415 <span class="sd"> other processing files. Default value is _config.PATH_INPUT_DIR.</span> 416 417 <span class="sd"> outputdir : str</span> 418 <span class="sd"> Path to the final directory where the final FLEXPART ready input</span> 419 <span class="sd"> files are stored. Default value is None.</span> 420 421 <span class="sd"> flexextractdir : str</span> 422 <span class="sd"> Path to the flex_extract root directory. Default value is</span> 423 <span class="sd"> _config.PATH_FLEXEXTRACT_DIR.</span> 424 425 <span class="sd"> exedir : str</span> 426 <span class="sd"> Path to the FORTRAN executable file. Default value is</span> 427 <span class="sd"> _config.PATH_FORTRAN_SRC.</span> 428 429 <span class="sd"> flexpartdir : str</span> 430 <span class="sd"> Path to a FLEXPART root directory. Default value is None.</span> 431 432 <span class="sd"> makefile : str</span> 433 <span class="sd"> Name of the makefile to be used for the Fortran program.</span> 434 <span class="sd"> Default value is 'Makefile.gfortran'.</span> 435 436 <span class="sd"> destination : str</span> 437 <span class="sd"> The remote destination which is used to transfer files</span> 438 <span class="sd"> from ECMWF server to local gateway server. Default value is None.</span> 439 440 <span class="sd"> gateway : str</span> 441 <span class="sd"> The gateway server the user is using. Default value is None.</span> 442 443 <span class="sd"> ecuid : str</span> 444 <span class="sd"> The user id on ECMWF server. Default value is None.</span> 445 446 <span class="sd"> ecgid : str</span> 447 <span class="sd"> The group id on ECMWF server. Default value is None.</span> 448 449 <span class="sd"> install_target : str</span> 450 <span class="sd"> Defines the location where the installation is to be done.</span> 451 <span class="sd"> Default value is None.</span> 452 453 <span class="sd"> debug : int</span> 454 <span class="sd"> Switch to keep temporary files at the end of postprocessing (1) or</span> 455 <span class="sd"> to delete all temporary files except the final output files (0).</span> 456 <span class="sd"> Default value is 0.</span> 457 458 <span class="sd"> request : int</span> 459 <span class="sd"> Switch to select between just retrieving the data (0), writing the mars</span> 460 <span class="sd"> parameter values to a csv file (1) or doing both (2).</span> 461 <span class="sd"> Default value is 0.</span> 462 463 <span class="sd"> public : int</span> 464 <span class="sd"> Switch to select kind of ECMWF Web Api access and the</span> 465 <span class="sd"> possible data sets. Public data sets (1) and Memberstate data sets (0).</span> 466 <span class="sd"> Default value is 0.</span> 467 468 <span class="sd"> ecapi : boolean</span> 469 <span class="sd"> Tells wether the ECMWF Web APi was able to load or not.</span> 470 <span class="sd"> Default value is None.</span> 471 472 <span class="sd"> purefc : int</span> 473 <span class="sd"> Switch to decide wether the job is a pure forecast retrieval or</span> 474 <span class="sd"> coupled with analysis data. Default value is 0.</span> 475 476 <span class="sd"> rrint: int</span> 477 <span class="sd"> Switch to select between old precipitation disaggregation method (0)</span> 478 <span class="sd"> or the new IA3 disaggegration method (1). Default value is 0.</span> 479 480 <span class="sd"> logicals : list of str</span> 481 <span class="sd"> List of the names of logical switches which controls the flow</span> 482 <span class="sd"> of the program. Default list is ['gauss', 'omega', 'omegadiff', 'eta',</span> 483 <span class="sd"> 'etadiff', 'dpdeta', 'cwc', 'wrf', 'grib2flexpart', 'ecstorage',</span> 484 <span class="sd"> 'ectrans', 'debug', 'request', 'public', 'purefc', 'rrint']</span> 223 485 <span class="sd"> '''</span> 224 486 … … 230 492 <span class="sd"> Parameters</span> 231 493 <span class="sd"> ----------</span> 232 <span class="sd"> filename : :obj:`string`</span>494 <span class="sd"> filename : str</span> 233 495 <span class="sd"> Name of CONTROL file.</span> 234 496 … … 243 505 <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="kc">None</span> 244 506 <span class="bp">self</span><span class="o">.</span><span class="n">date_chunk</span> <span class="o">=</span> <span class="mi">3</span> 507 <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="kc">None</span> 245 508 <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="kc">None</span> 246 509 <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="kc">None</span> … … 289 552 <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_INPUT_DIR</span> 290 553 <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">=</span> <span class="kc">None</span> 291 <span class="bp">self</span><span class="o">.</span><span class="n"> ecmwfdatadir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span>554 <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> 292 555 <span class="bp">self</span><span class="o">.</span><span class="n">exedir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span> 293 <span class="bp">self</span><span class="o">.</span><span class="n">flexpart _root_scripts</span> <span class="o">=</span> <span class="kc">None</span>556 <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="kc">None</span> 294 557 <span class="bp">self</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">'Makefile.gfortran'</span> 295 558 <span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span> … … 301 564 <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">=</span> <span class="mi">0</span> 302 565 <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="o">=</span> <span class="mi">0</span> 566 <span class="bp">self</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="kc">None</span> 567 <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="mi">0</span> 568 <span class="bp">self</span><span class="o">.</span><span class="n">rrint</span> <span class="o">=</span> <span class="mi">0</span> 303 569 304 570 <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gauss'</span><span class="p">,</span> <span class="s1">'omega'</span><span class="p">,</span> <span class="s1">'omegadiff'</span><span class="p">,</span> <span class="s1">'eta'</span><span class="p">,</span> <span class="s1">'etadiff'</span><span class="p">,</span> 305 571 <span class="s1">'dpdeta'</span><span class="p">,</span> <span class="s1">'cwc'</span><span class="p">,</span> <span class="s1">'wrf'</span><span class="p">,</span> <span class="s1">'grib2flexpart'</span><span class="p">,</span> <span class="s1">'ecstorage'</span><span class="p">,</span> 306 <span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'debug'</span><span class="p">,</span> <span class="s1">'request'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">]</span> 307 308 <span class="bp">self</span><span class="o">.</span><span class="n">__read_controlfile__</span><span class="p">()</span> 572 <span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'debug'</span><span class="p">,</span> <span class="s1">'request'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">,</span> <span class="s1">'purefc'</span><span class="p">,</span> 573 <span class="s1">'rrint'</span><span class="p">]</span> 574 575 <span class="bp">self</span><span class="o">.</span><span class="n">_read_controlfile</span><span class="p">()</span> 309 576 310 577 <span class="k">return</span> 311 578 312 <span class="k">def</span> <span class="nf">_ _read_controlfile__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>579 <span class="k">def</span> <span class="nf">_read_controlfile</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 313 580 <span class="sd">'''Read CONTROL file and assign all CONTROL file variables.</span> 314 581 … … 334 601 <span class="c1"># go through every line and store parameter</span> 335 602 <span class="k">for</span> <span class="n">ldata</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> 603 <span class="k">if</span> <span class="n">ldata</span> <span class="ow">and</span> <span class="n">ldata</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span> 604 <span class="c1"># ignore comment line in control file</span> 605 <span class="k">continue</span> 606 <span class="k">if</span> <span class="s1">'#'</span> <span class="ow">in</span> <span class="n">ldata</span><span class="p">:</span> 607 <span class="c1"># cut off comment</span> 608 <span class="n">ldata</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 336 609 <span class="n">data</span> <span class="o">=</span> <span class="n">ldata</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> 337 610 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> … … 344 617 <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'day2'</span><span class="p">:</span> 345 618 <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'end_date'</span> 346 <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'addpar'</span><span class="p">:</span>347 <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>348 <span class="c1"># remove leading '/' sign from addpar content</span>349 <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span>350 <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span>351 <span class="n">dd</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span>352 <span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>353 <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dd</span><span class="p">:</span>354 <span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>355 619 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 356 620 <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> … … 417 681 <span class="sd"> Parameters</span> 418 682 <span class="sd"> ----------</span> 419 <span class="sd"> args : :obj:`Namespace`</span>683 <span class="sd"> args : Namespace</span> 420 684 <span class="sd"> Contains the commandline arguments from script/program call.</span> 421 685 … … 442 706 <span class="sd"> Parameters</span> 443 707 <span class="sd"> ----------</span> 444 <span class="sd"> envs : :obj:`dictionary` of :obj:`strings`</span>708 <span class="sd"> envs : dict of str</span> 445 709 <span class="sd"> Contains the ECMWF environment parameternames "ECUID", "ECGID",</span> 446 710 <span class="sd"> "DESTINATION" and "GATEWAY" with its corresponding values.</span> … … 464 728 <span class="sd"> Parameters</span> 465 729 <span class="sd"> ----------</span> 466 <span class="sd"> queue : :obj:`string`</span>730 <span class="sd"> queue : str</span> 467 731 <span class="sd"> Name of the queue if submitted to the ECMWF servers.</span> 468 732 <span class="sd"> Used to check if ecuid, ecgid, gateway and destination</span> … … 473 737 474 738 <span class="sd"> '''</span> 475 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">my_error</span> 476 <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> 477 478 <span class="c1"># check for having at least a starting date</span> 479 <span class="c1"># otherwise program is not allowed to run</span> 480 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">:</span> 481 <span class="nb">print</span><span class="p">(</span><span class="s1">'start_date specified neither in command line nor </span><span class="se">\</span> 482 <span class="s1"> in CONTROL file '</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> 483 <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> 484 <span class="s1">' -h" to print usage information'</span><span class="p">)</span> 485 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 486 487 <span class="c1"># retrieve just one day if end_date isn't set</span> 488 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span><span class="p">:</span> 489 <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> 490 491 <span class="c1"># basetime has only two possible values</span> 492 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> 493 <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">12</span><span class="p">:</span> 494 <span class="nb">print</span><span class="p">(</span><span class="s1">'Basetime has an invalid value!'</span><span class="p">)</span> 495 <span class="nb">print</span><span class="p">(</span><span class="s1">'Basetime = '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">))</span> 496 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 497 498 <span class="c1"># assure consistency of levelist and level</span> 499 <span class="c1"># up-to-date available maximum level numbers at ECMWF, 05.10.2018</span> 500 <span class="n">max_level_list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">16</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">62</span><span class="p">,</span> <span class="mi">91</span><span class="p">,</span> <span class="mi">137</span><span class="p">]</span> 501 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">:</span> 502 <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: neither levelist nor level </span><span class="se">\</span> 503 <span class="s1"> specified in CONTROL file'</span><span class="p">)</span> 504 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 505 <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">:</span> 506 <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span> 507 <span class="k">elif</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> <span class="ow">or</span> \ 508 <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span> 509 <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> 510 <span class="k">else</span><span class="p">:</span> 511 <span class="k">pass</span> 512 513 <span class="c1"># check if max level is a valid level</span> 514 <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">max_level_list</span><span class="p">:</span> 515 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">)</span> 516 <span class="nb">print</span><span class="p">(</span><span class="s1">'LEVEL must be the maximum level of a specified '</span> 517 <span class="s1">'level list from ECMWF, e.g.'</span><span class="p">)</span> 518 <span class="nb">print</span><span class="p">(</span><span class="s1">'[16, 19, 31, 40, 50, 60, 62, 91 or 137]'</span><span class="p">)</span> 519 <span class="nb">print</span><span class="p">(</span><span class="s1">'Check parameter "LEVEL" or the max level of "LEVELIST"!'</span><span class="p">)</span> 520 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 521 522 <span class="c1"># if area was provided (only from commandline)</span> 523 <span class="c1"># decompose area into its 4 components</span> 524 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">:</span> 525 <span class="n">components</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> 526 <span class="c1"># convert float to integer coordinates</span> 527 <span class="k">if</span> <span class="s1">'.'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">:</span> 528 <span class="n">components</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">))</span> 529 <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">components</span><span class="p">)]</span> 530 <span class="bp">self</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">components</span> 531 532 <span class="c1"># prepare step list if "/" signs are found</span> 533 <span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">:</span> 534 <span class="n">steps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> 535 <span class="k">if</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> 536 <span class="n">ilist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> 537 <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> 538 <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span> 539 <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ilist</span><span class="p">]</span> 540 <span class="k">elif</span> <span class="s1">'to'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">'by'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> 541 <span class="n">my_error</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">+</span> <span class="s1">':</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span> 542 <span class="s1">'if "to" is used in steps parameter, </span><span class="se">\</span> 543 <span class="s1"> please use "by" as well'</span><span class="p">)</span> 544 <span class="k">else</span><span class="p">:</span> 545 <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">steps</span> 546 547 <span class="c1"># if maxstep wasn't provided</span> 548 <span class="c1"># search for it in the "step" parameter</span> 549 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span> 550 <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="mi">0</span> 551 <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">:</span> 552 <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span> 553 <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> 554 <span class="k">else</span><span class="p">:</span> 555 <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> 556 557 <span class="c1"># set root scripts since it is needed later on</span> 558 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> 559 <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecmwfdatadir</span> 560 561 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">:</span> 562 <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> 563 564 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 565 <span class="k">if</span> <span class="s1">','</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">:</span> 566 <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> 567 <span class="k">elif</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">:</span> 568 <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> 569 <span class="k">else</span><span class="p">:</span> 570 <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">]</span> 571 572 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 573 <span class="k">if</span> <span class="s1">','</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">:</span> 574 <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> 575 <span class="k">elif</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">:</span> 576 <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> 577 <span class="k">else</span><span class="p">:</span> 578 <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">]</span> 579 580 <span class="k">if</span> <span class="n">queue</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">QUEUES_LIST</span> <span class="ow">and</span> \ 581 <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="ow">or</span> \ 582 <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span><span class="p">:</span> 583 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Environment variables GATEWAY, DESTINATION, ECUID and </span><span class="se">\</span> 584 <span class="s1"> ECGID were not set properly!'</span><span class="p">)</span> 585 <span class="nb">print</span><span class="p">(</span><span class="s1">'Please check for existence of file "ECMWF_ENV" in the </span><span class="se">\</span> 586 <span class="s1"> python directory!'</span><span class="p">)</span> 587 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 588 589 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> 590 <span class="n">marsfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> 591 <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">)</span> 592 <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> 593 <span class="n">silent_remove</span><span class="p">(</span><span class="n">marsfile</span><span class="p">)</span> 594 595 <span class="c1"># check all logical variables for data type</span> 596 <span class="c1"># if its a string change to integer</span> 597 <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span><span class="p">:</span> 598 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">),</span> <span class="nb">int</span><span class="p">):</span> 599 <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">var</span><span class="p">)))</span> 600 601 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">public</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">:</span> 602 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">)</span> 603 <span class="nb">print</span><span class="p">(</span><span class="s1">'If public mars data wants to be retrieved, '</span> 604 <span class="s1">'the "dataset"-parameter has to be set in the control file!'</span><span class="p">)</span> 605 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 606 607 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 608 <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">]</span> 609 610 <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">):</span> 611 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> 612 <span class="nb">print</span><span class="p">(</span><span class="s1">'Analysis retrievals must have STEP = 0 (is set to 0)'</span><span class="p">)</span> 613 <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span> 614 615 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 616 <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">]</span> 617 618 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 619 <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">]</span> 620 621 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">:</span> 622 <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCTYPE was not defined.'</span><span class="p">)</span> 623 <span class="k">try</span><span class="p">:</span> 624 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'AN'</span><span class="p">:</span> 625 <span class="nb">print</span><span class="p">(</span><span class="s1">'Use old setting by using TYPE[1] for flux forecast!'</span><span class="p">)</span> 626 <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> 627 <span class="k">except</span><span class="p">:</span> 628 <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "FC" for flux forecast!'</span><span class="p">)</span> 629 <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="o">=</span><span class="s1">'FC'</span> 630 631 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">:</span> 632 <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCTIME was not defined.'</span><span class="p">)</span> 633 <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "00/12" for flux forecast!'</span><span class="p">)</span> 634 <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="o">=</span><span class="s1">'00/12'</span> 635 636 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">:</span> 637 <span class="nb">print</span><span class="p">(</span><span class="s1">'... Control paramter ACCMAXSTEP was not defined.'</span><span class="p">)</span> 638 <span class="nb">print</span><span class="p">(</span><span class="s1">'Use default value "12" for flux forecast!'</span><span class="p">)</span> 639 <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="o">=</span><span class="s1">'12'</span> 640 641 <span class="k">return</span></div> 642 643 <div class="viewcode-block" id="ControlFile.check_install_conditions"><a class="viewcode-back" href="../api.html#ControlFile.ControlFile.check_install_conditions">[docs]</a> <span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 644 <span class="sd">'''Checks a couple of necessary attributes and conditions</span> 645 <span class="sd"> for the installation such as if they exist and contain values.</span> 646 <span class="sd"> Otherwise set default values.</span> 647 648 <span class="sd"> Parameters</span> 649 <span class="sd"> ----------</span> 650 651 <span class="sd"> Return</span> 652 <span class="sd"> ------</span> 653 654 <span class="sd"> '''</span> 655 656 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> \ 657 <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'ecgate'</span><span class="p">,</span> <span class="s1">'cca'</span><span class="p">]:</span> 658 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: unknown or missing installation target '</span><span class="p">)</span> 659 <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> 660 <span class="nb">print</span><span class="p">(</span><span class="s1">'please specify correct installation target '</span> <span class="o">+</span> 661 <span class="s1">'(local | ecgate | cca)'</span><span class="p">)</span> 662 <span class="nb">print</span><span class="p">(</span><span class="s1">'use -h or --help for help'</span><span class="p">)</span> 663 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 664 665 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_target</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> 666 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> \ 667 <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> 668 <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id as well '</span> <span class="o">+</span> 669 <span class="s1">'as the </span><span class="se">\n</span><span class="s1">name of the local gateway and the ectrans '</span> <span class="o">+</span> 670 <span class="s1">'destination '</span><span class="p">)</span> 671 <span class="nb">print</span><span class="p">(</span><span class="s1">'with command line options --ecuid --ecgid </span><span class="se">\</span> 672 <span class="s1"> --gateway --destination'</span><span class="p">)</span> 673 <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \ 674 <span class="s1">' -h" to print usage information'</span><span class="p">)</span> 675 <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user </span><span class="se">\</span> 676 <span class="s1"> support for further details'</span><span class="p">)</span> 677 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 678 679 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> 680 <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{HOME}</span><span class="s1">'</span> 681 <span class="k">else</span><span class="p">:</span> 682 <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> 683 <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> 684 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">:</span> 685 <span class="bp">self</span><span class="o">.</span><span class="n">flexpart_root_scripts</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> 739 <span class="n">check_logicals_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">logicals</span><span class="p">)</span> 740 741 <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">)</span> 742 743 <span class="bp">self</span><span class="o">.</span><span class="n">mailops</span> <span class="o">=</span> <span class="n">check_mail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mailops</span><span class="p">)</span> 744 745 <span class="n">check_queue</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> 746 <span class="bp">self</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ecgid</span><span class="p">)</span> 747 748 <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">check_pathes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> 749 <span class="bp">self</span><span class="o">.</span><span class="n">outputdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">flexextractdir</span><span class="p">)</span> 750 751 <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">check_dates</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> 752 <span class="bp">self</span><span class="o">.</span><span class="n">end_date</span><span class="p">)</span> 753 754 <span class="n">check_basetime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">basetime</span><span class="p">)</span> 755 756 <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">check_levels</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">)</span> 757 758 <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailfail</span><span class="p">)</span> 759 760 <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">=</span> <span class="n">check_maxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> 761 762 <span class="n">check_request</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> 763 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> 764 765 <span class="n">check_public</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">public</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span> 766 767 <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">check_type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> 768 769 <span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">check_time</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">)</span> 770 771 <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="n">check_len_type_time_step</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> 772 <span class="bp">self</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> 773 <span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> 774 <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">,</span> 775 <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">)</span> 776 777 <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">check_acctype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> 778 779 <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">check_acctime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">)</span> 780 781 <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">check_accmaxstep</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">,</span> 782 <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> 783 784 <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">check_purefc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> 785 786 <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">check_grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> 787 788 <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">check_area</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> 789 <span class="bp">self</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> 790 791 <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">check_addpar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">)</span> 792 793 <span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span> <span class="o">=</span> <span class="n">check_job_chunk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> 686 794 687 795 <span class="k">return</span></div> … … 690 798 <span class="sd">'''Just generates a list of strings containing the attributes and</span> 691 799 <span class="sd"> assigned values except the attributes "_expanded", "exedir",</span> 692 <span class="sd"> " ecmwfdatadir" and "flexpart_root_scripts".</span>800 <span class="sd"> "flexextractdir" and "flexpartdir".</span> 693 801 694 802 <span class="sd"> Parameters</span> … … 697 805 <span class="sd"> Return</span> 698 806 <span class="sd"> ------</span> 699 <span class="sd"> l : :obj:`list`</span>807 <span class="sd"> l : list of *</span> 700 808 <span class="sd"> A sorted list of the all ControlFile class attributes with</span> 701 809 <span class="sd"> their values except the attributes "_expanded", "exedir",</span> 702 <span class="sd"> " ecmwfdatadir" and "flexpart_root_scripts".</span>810 <span class="sd"> "flexextractdir" and "flexpartdir".</span> 703 811 <span class="sd"> '''</span> 704 812 … … 714 822 <span class="k">elif</span> <span class="s1">'exedir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> 715 823 <span class="k">pass</span> 716 <span class="k">elif</span> <span class="s1">'flexpart _root_scripts'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>824 <span class="k">elif</span> <span class="s1">'flexpartdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> 717 825 <span class="k">pass</span> 718 <span class="k">elif</span> <span class="s1">' ecmwfdatadir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>826 <span class="k">elif</span> <span class="s1">'flexextractdir'</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> 719 827 <span class="k">pass</span> 720 828 <span class="k">else</span><span class="p">:</span> … … 724 832 <span class="n">stot</span> <span class="o">+=</span> <span class="n">s</span> <span class="o">+</span> <span class="s1">' '</span> 725 833 726 <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s 2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">stot</span><span class="p">))</span>834 <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">stot</span><span class="p">))</span> 727 835 <span class="k">else</span><span class="p">:</span> 728 <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s 2">"</span> <span class="o">%</span> <span class="n">item</span><span class="p">)</span>836 <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">item</span><span class="p">)</span> 729 837 730 838 <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">l</span><span class="p">)</span></div></div> … … 742 850 <div role="contentinfo"> 743 851 <p> 744 © Copyright 2018, Anne Philipp and Leopold Haimberger .852 © Copyright 2018, Anne Philipp and Leopold Haimberger 745 853 746 854 </p> … … 761 869 762 870 763 <script type="text/javascript"> 764 var DOCUMENTATION_OPTIONS = { 765 URL_ROOT:'../', 766 VERSION:'7.1 alpha', 767 LANGUAGE:'None', 768 COLLAPSE_INDEX:false, 769 FILE_SUFFIX:'.html', 770 HAS_SOURCE: true, 771 SOURCELINK_SUFFIX: '.txt' 772 }; 773 </script> 774 <script type="text/javascript" src="../_static/jquery.js"></script> 775 <script type="text/javascript" src="../_static/underscore.js"></script> 776 <script type="text/javascript" src="../_static/doctools.js"></script> 777 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 871 872 873 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 874 <script type="text/javascript" src="../_static/jquery.js"></script> 875 <script type="text/javascript" src="../_static/underscore.js"></script> 876 <script type="text/javascript" src="../_static/doctools.js"></script> 877 778 878 779 879 -
documentation/Sphinx/build/html/_modules/EcFlexpart.html
r274f9ef r2625ca8 194 194 <span class="c1">#</span> 195 195 <span class="c1"># @License:</span> 196 <span class="c1"># (C) Copyright 2014-2018.</span> 196 <span class="c1"># (C) Copyright 2014-2019.</span> 197 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 197 198 <span class="c1">#</span> 198 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 199 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 200 <span class="c1">#</span> 201 <span class="c1"># @Class Description:</span> 202 <span class="c1"># FLEXPART needs grib files in a specifc format. All necessary data fields</span> 203 <span class="c1"># for one time step are stored in a single file. The class represents an</span> 204 <span class="c1"># instance with all the parameter and settings necessary for retrieving</span> 205 <span class="c1"># MARS data and modifing them so they are fitting FLEXPART need. The class</span> 206 <span class="c1"># is able to disaggregate the fluxes and convert grid types to the one needed</span> 207 <span class="c1"># by FLEXPART, therefore using the FORTRAN program.</span> 208 <span class="c1">#</span> 209 <span class="c1"># @Class Content:</span> 210 <span class="c1"># - __init__</span> 211 <span class="c1"># - write_namelist</span> 212 <span class="c1"># - retrieve</span> 213 <span class="c1"># - process_output</span> 214 <span class="c1"># - create</span> 215 <span class="c1"># - deacc_fluxes</span> 216 <span class="c1">#</span> 217 <span class="c1"># @Class Attributes:</span> 218 <span class="c1">#</span> 219 <span class="c1"># TODO</span> 220 <span class="c1">#</span> 199 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 200 <span class="c1"># International License. To view a copy of this license, visit</span> 201 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 202 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 221 203 <span class="c1">#*******************************************************************************</span> 222 204 <span class="c1">#pylint: disable=unsupported-assignment-operation</span> … … 235 217 <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> 236 218 237 <span class="kn">from</span> <span class="nn">gribapi</span> <span class="k">import</span> <span class="p">(</span><span class="n">grib_set</span><span class="p">,</span> <span class="n">grib_index_select</span><span class="p">,</span> <span class="n">grib_new_from_index</span><span class="p">,</span> <span class="n">grib_get</span><span class="p">,</span> 238 <span class="n">grib_write</span><span class="p">,</span> <span class="n">grib_get_values</span><span class="p">,</span> <span class="n">grib_set_values</span><span class="p">,</span> <span class="n">grib_release</span><span class="p">,</span> 239 <span class="n">grib_index_release</span><span class="p">,</span> <span class="n">grib_index_get</span><span class="p">)</span> 240 241 <span class="c1"># from eccodes import (codes_index_select, codes_new_from_index, codes_get,</span> 242 <span class="c1"># codes_get_values, codes_set_values, codes_set,</span> 243 <span class="c1"># codes_write, codes_release, codes_new_from_index,</span> 244 <span class="c1"># codes_index_release, codes_index_get)</span> 219 <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> 220 <span class="n">codes_get_values</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> 221 <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> 222 <span class="n">codes_index_release</span><span class="p">,</span> <span class="n">codes_index_get</span><span class="p">)</span> 245 223 246 224 <span class="c1"># software specific classes and modules from flex_extract</span> 247 225 <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> 248 226 <span class="kn">import</span> <span class="nn">_config</span> 249 <span class="kn">from</span> <span class="nn">Grib Tools</span> <span class="k">import</span> <span class="n">GribTools</span>227 <span class="kn">from</span> <span class="nn">GribUtil</span> <span class="k">import</span> <span class="n">GribUtil</span> 250 228 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">init128</span><span class="p">,</span> <span class="n">to_param_id</span><span class="p">,</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> 251 <span class="n">my_error</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> 229 <span class="n">my_error</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">get_informations</span><span class="p">,</span> <span class="n">get_dimensions</span><span class="p">,</span> 230 <span class="n">execute_subprocess</span><span class="p">)</span> 252 231 <span class="kn">from</span> <span class="nn">MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> 253 232 <span class="kn">import</span> <span class="nn">mods.disaggregation</span> <span class="k">as</span> <span class="nn">disaggregation</span> … … 258 237 <div class="viewcode-block" id="EcFlexpart"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart">[docs]</a><span class="k">class</span> <span class="nc">EcFlexpart</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 259 238 <span class="sd">'''</span> 260 <span class="sd"> Class to retrieve FLEXPART specific ECMWF data.</span> 239 <span class="sd"> Class to represent FLEXPART specific ECMWF data.</span> 240 241 <span class="sd"> FLEXPART needs grib files in a specifc format. All necessary data fields</span> 242 <span class="sd"> for one time step are stored in a single file. The class represents an</span> 243 <span class="sd"> instance with all the parameter and settings necessary for retrieving</span> 244 <span class="sd"> MARS data and modifing them so they are fitting FLEXPART needs. The class</span> 245 <span class="sd"> is able to disaggregate the fluxes and convert grid types to the one needed</span> 246 <span class="sd"> by FLEXPART, therefore using the FORTRAN program.</span> 247 248 <span class="sd"> Attributes</span> 249 <span class="sd"> ----------</span> 250 <span class="sd"> mreq_count : int</span> 251 <span class="sd"> Counter for the number of generated mars requests.</span> 252 253 <span class="sd"> inputdir : str</span> 254 <span class="sd"> Path to the directory where the retrieved data is stored.</span> 255 256 <span class="sd"> dataset : str</span> 257 <span class="sd"> For public datasets there is the specific naming and parameter</span> 258 <span class="sd"> dataset which has to be used to characterize the type of</span> 259 <span class="sd"> data.</span> 260 261 <span class="sd"> basetime : str</span> 262 <span class="sd"> The time for a half day retrieval. The 12 hours upfront are to be</span> 263 <span class="sd"> retrieved.</span> 264 265 <span class="sd"> dtime : str</span> 266 <span class="sd"> Time step in hours.</span> 267 268 <span class="sd"> acctype : str</span> 269 <span class="sd"> The field type for the accumulated forecast fields.</span> 270 271 <span class="sd"> acctime : str</span> 272 <span class="sd"> The starting time from the accumulated forecasts.</span> 273 274 <span class="sd"> accmaxstep : str</span> 275 <span class="sd"> The maximum forecast step for the accumulated forecast fields.</span> 276 277 <span class="sd"> marsclass : str</span> 278 <span class="sd"> Characterisation of dataset.</span> 279 280 <span class="sd"> stream : str</span> 281 <span class="sd"> Identifies the forecasting system used to generate the data.</span> 282 283 <span class="sd"> number : str</span> 284 <span class="sd"> Selects the member in ensemble forecast run.</span> 285 286 <span class="sd"> resol : str</span> 287 <span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> 288 <span class="sd"> before carrying out any other selected post-processing.</span> 289 290 <span class="sd"> accuracy : str</span> 291 <span class="sd"> Specifies the number of bits per value to be used in the</span> 292 <span class="sd"> generated GRIB coded fields.</span> 293 294 <span class="sd"> addpar : str</span> 295 <span class="sd"> List of additional parameters to be retrieved.</span> 296 297 <span class="sd"> level : str</span> 298 <span class="sd"> Specifies the maximum level.</span> 299 300 <span class="sd"> expver : str</span> 301 <span class="sd"> The version of the dataset.</span> 302 303 <span class="sd"> levelist : str</span> 304 <span class="sd"> Specifies the required levels.</span> 305 306 <span class="sd"> glevelist : str</span> 307 <span class="sd"> Specifies the required levels for gaussian grids.</span> 308 309 <span class="sd"> gaussian : str</span> 310 <span class="sd"> This parameter is deprecated and should no longer be used.</span> 311 <span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> 312 313 <span class="sd"> grid : str</span> 314 <span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> 315 <span class="sd"> or a Latitude/Longitude grid.</span> 316 317 <span class="sd"> area : str</span> 318 <span class="sd"> Specifies the desired sub-area of data to be extracted.</span> 319 320 <span class="sd"> purefc : int</span> 321 <span class="sd"> Switch for definition of pure forecast mode or not.</span> 322 323 <span class="sd"> outputfilelist : list of str</span> 324 <span class="sd"> The final list of FLEXPART ready input files.</span> 325 326 <span class="sd"> types : dictionary</span> 327 <span class="sd"> Determines the combination of type of fields, time and forecast step</span> 328 <span class="sd"> to be retrieved.</span> 329 330 <span class="sd"> params : dictionary</span> 331 <span class="sd"> Collection of grid types and their corresponding parameters,</span> 332 <span class="sd"> levels, level types and the grid definition.</span> 333 334 <span class="sd"> server : ECMWFService or ECMWFDataServer</span> 335 <span class="sd"> This is the connection to the ECMWF data servers.</span> 336 337 <span class="sd"> public : int</span> 338 <span class="sd"> Decides which Web API Server version is used.</span> 339 340 <span class="sd"> dates : str</span> 341 <span class="sd"> Contains start and end date of the retrieval in the format</span> 342 <span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> 261 343 <span class="sd"> '''</span> 344 262 345 <span class="c1"># --------------------------------------------------------------------------</span> 263 346 <span class="c1"># CLASS FUNCTIONS</span> … … 269 352 <span class="sd"> Parameters:</span> 270 353 <span class="sd"> -----------</span> 271 <span class="sd"> c : :obj:`ControlFile`</span>354 <span class="sd"> c : ControlFile</span> 272 355 <span class="sd"> Contains all the parameters of CONTROL file and</span> 273 356 <span class="sd"> command line.</span> 274 357 275 <span class="sd"> fluxes : :obj:`boolean`, optional</span>358 <span class="sd"> fluxes : boolean, optional</span> 276 359 <span class="sd"> Decides if the flux parameter settings are stored or</span> 277 360 <span class="sd"> the rest of the parameter list.</span> … … 282 365 283 366 <span class="sd"> '''</span> 284 <span class="c1"># set a counter for the number of mars requests generated</span>367 <span class="c1"># set a counter for the number of generated mars requests</span> 285 368 <span class="bp">self</span><span class="o">.</span><span class="n">mreq_count</span> <span class="o">=</span> <span class="mi">0</span> 286 287 <span class="c1"># different mars types for retrieving data for flexpart</span>288 <span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>289 290 <span class="c1"># Pure forecast mode</span>291 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">)</span> <span class="ow">and</span> <span class="s1">'AN'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>292 <span class="n">c</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>293 <span class="n">c</span><span class="o">.</span><span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="mi">0</span><span class="p">]))]</span>294 <span class="n">c</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>295 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>296 <span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>297 <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>298 <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>299 369 300 370 <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> … … 302 372 <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> 303 373 <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span> 304 <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> 305 <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> 306 <span class="c1"># no forecast beyond one day is needed!</span> 307 <span class="c1"># Thus, prepare flux data manually as usual</span> 308 <span class="c1"># with only forecast fields with start times at 00/12</span> 309 <span class="c1"># (but without 00/12 fields since these are</span> 310 <span class="c1"># the initialisation times of the flux fields</span> 311 <span class="c1"># and therefore are zero all the time)</span> 312 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">acctype</span><span class="p">)]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">acctime</span><span class="p">),</span> 313 <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> 314 <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)}</span> 315 <span class="k">else</span><span class="p">:</span> 316 <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">):</span> 317 <span class="n">btlist</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span> 318 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> 319 <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span> 320 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> 321 <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> 322 323 <span class="k">if</span> <span class="p">((</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> 324 <span class="p">(</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> 325 <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">))</span> <span class="p">)</span> <span class="ow">and</span> \ 326 <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="ow">in</span> <span class="n">btlist</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">):</span> 327 328 <span class="k">if</span> <span class="n">ty</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> 329 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> 330 331 <span class="k">if</span> <span class="n">ti</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> 332 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> 333 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> 334 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">ti</span> 335 336 <span class="k">if</span> <span class="n">st</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> 337 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> 338 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> 339 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">st</span> 340 <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> 341 374 <span class="bp">self</span><span class="o">.</span><span class="n">acctype</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctype</span> 375 <span class="bp">self</span><span class="o">.</span><span class="n">acctime</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">acctime</span> 376 <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accmaxstep</span> 342 377 <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span> 343 378 <span class="bp">self</span><span class="o">.</span><span class="n">stream</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">stream</span> … … 345 380 <span class="bp">self</span><span class="o">.</span><span class="n">resol</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">resol</span> 346 381 <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">accuracy</span> 382 <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span> 347 383 <span class="bp">self</span><span class="o">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> 348 384 <span class="bp">self</span><span class="o">.</span><span class="n">expver</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">expver</span> 349 385 <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">levelist</span> 350 <span class="c1"># for gaussian grid retrieval</span> 351 <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> 386 <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span> <span class="o">=</span> <span class="s1">'1/to/'</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">level</span> <span class="c1"># in case of gaussian grid</span> 352 387 <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">gaussian</span> 353 354 <span class="k">if</span> <span class="s1">'N'</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">:</span> <span class="c1"># Gaussian output grid</span> 355 <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span> 356 <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="s1">'G'</span> 388 <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">grid</span> 389 <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">area</span> 390 <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> 391 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span> <span class="o">=</span> <span class="p">[]</span> 392 393 <span class="c1"># Define the different types of field combinations (type, time, step)</span> 394 <span class="bp">self</span><span class="o">.</span><span class="n">types</span> <span class="o">=</span> <span class="p">{}</span> 395 <span class="c1"># Define the parameters and their level types, level list and</span> 396 <span class="c1"># grid resolution for the retrieval job</span> 397 <span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="p">{}</span> 398 399 <span class="k">if</span> <span class="n">fluxes</span><span class="p">:</span> 400 <span class="bp">self</span><span class="o">.</span><span class="n">_create_params_fluxes</span><span class="p">()</span> 357 401 <span class="k">else</span><span class="p">:</span> 358 <span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> 359 <span class="bp">self</span><span class="o">.</span><span class="n">area</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> 360 <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> 361 <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span> 362 <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span> 363 364 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span> <span class="o">=</span> <span class="p">[]</span> 365 366 367 <span class="c1"># Now comes the nasty part that deals with the different</span> 368 <span class="c1"># scenarios we have:</span> 369 <span class="c1"># 1) Calculation of etadot on</span> 370 <span class="c1"># a) Gaussian grid</span> 371 <span class="c1"># b) Output grid</span> 372 <span class="c1"># c) Output grid using parameter 77 retrieved from MARS</span> 373 <span class="c1"># 3) Calculation/Retrieval of omega</span> 374 <span class="c1"># 4) Download also data for WRF</span> 375 376 <span class="c1"># Different grids need different retrievals</span> 377 <span class="c1"># SH = Spherical Harmonics, GG = Gaussian Grid,</span> 378 <span class="c1"># OG = Output Grid, ML = MultiLevel, SL = SingleLevel</span> 379 <span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'SH__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'SH__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> 380 <span class="s1">'GG__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'GG__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> 381 <span class="s1">'OG__ML'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'OG__SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> 382 <span class="s1">'OG_OROLSM_SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'OG_acc_SL'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> 383 <span class="c1"># the self.params dictionary stores a list of</span> 384 <span class="c1"># [param, levtype, levelist, grid] per key</span> 385 386 <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span> 387 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'LNSP'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> 388 <span class="c1"># "SD/MSL/TCC/10U/10V/2T/2D/129/172"</span> 389 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"141/151/164/165/166/167/168/129/172"</span><span class="p">,</span> \ 390 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 391 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">:</span> 392 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span> 393 <span class="n">c</span><span class="o">.</span><span class="n">addpar</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> 394 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">addpar</span><span class="p">)</span> 395 396 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> 397 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"160/27/28/244"</span><span class="p">,</span> 398 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 399 <span class="k">else</span><span class="p">:</span> 400 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"160/27/28/173"</span><span class="p">,</span> \ 401 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 402 403 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T/Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 404 405 <span class="c1">#if c.gauss == '0' and c.eta == '1':</span> 406 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> 407 <span class="c1"># the simplest case</span> 408 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V/77'</span> 409 <span class="c1">#elif c.gauss == '0' and c.eta == '0':</span> 410 <span class="k">elif</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> 411 <span class="c1"># this is not recommended (inaccurate)</span> 412 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V'</span> 413 <span class="c1">#elif c.gauss == '1' and c.eta == '0':</span> 414 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">:</span> 415 <span class="c1"># this is needed for data before 2008, or for reanalysis data</span> 416 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ 417 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 418 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> 419 <span class="k">else</span><span class="p">:</span> 420 <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: This is a very costly parameter combination, </span><span class="se">\</span> 421 <span class="s1"> use only for debugging!'</span><span class="p">)</span> 422 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ 423 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 424 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D/77'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> \ 425 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 426 427 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">:</span> 428 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/W'</span> 429 430 <span class="c1"># add cloud water content if necessary</span> 431 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">:</span> 432 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/CLWC/CIWC'</span> 433 434 <span class="c1"># add vorticity and geopotential height for WRF if necessary</span> 435 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">:</span> 436 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/Z/VO'</span> 437 <span class="k">if</span> <span class="s1">'/D'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> 438 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/D'</span> 439 <span class="c1">#wrf_sfc = 'sp/msl/skt/2t/10u/10v/2d/z/lsm/sst/ci/sd/stl1/ /</span> 440 <span class="c1"># stl2/stl3/stl4/swvl1/swvl2/swvl3/swvl4'.upper()</span> 441 <span class="n">wrf_sfc</span> <span class="o">=</span> <span class="s1">'134/235/167/165/166/168/129/172/34/31/141/ </span><span class="se">\</span> 442 <span class="s1"> 139/170/183/236/39/40/41/42'</span> 443 <span class="n">lwrt_sfc</span> <span class="o">=</span> <span class="n">wrf_sfc</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> 444 <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">lwrt_sfc</span><span class="p">:</span> 445 <span class="k">if</span> <span class="n">par</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> 446 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">par</span> 447 402 <span class="bp">self</span><span class="o">.</span><span class="n">_create_params</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">cwc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">)</span> 403 404 <span class="k">if</span> <span class="n">fluxes</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 405 <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types_fluxes</span><span class="p">()</span> 448 406 <span class="k">else</span><span class="p">:</span> 449 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"LSP/CP/SSHF/EWSS/NSSS/SSR"</span><span class="p">,</span> \ 450 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 451 407 <span class="bp">self</span><span class="o">.</span><span class="n">_create_field_types</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">time</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">step</span><span class="p">)</span> 408 <span class="k">return</span> 409 410 <span class="k">def</span> <span class="nf">_create_field_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">fstep</span><span class="p">):</span> 411 <span class="sd">'''Create the combination of field type, time and forecast step.</span> 412 413 <span class="sd"> Parameters:</span> 414 <span class="sd"> -----------</span> 415 <span class="sd"> ftype : list of str</span> 416 <span class="sd"> List of field types.</span> 417 418 <span class="sd"> ftime : list of str</span> 419 <span class="sd"> The time in hours of the field.</span> 420 421 <span class="sd"> fstep : str</span> 422 <span class="sd"> Specifies the forecast time step from forecast base time.</span> 423 <span class="sd"> Valid values are hours (HH) from forecast base time.</span> 424 425 <span class="sd"> Return</span> 426 <span class="sd"> ------</span> 427 428 <span class="sd"> '''</span> 429 <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> 430 <span class="k">for</span> <span class="n">ty</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="n">ti</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">fstep</span><span class="p">,</span> <span class="n">ftime</span><span class="p">):</span> 431 <span class="n">btlist</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span> 432 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> 433 <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span> 434 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> 435 <span class="n">btlist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> 436 437 <span class="c1"># if ((ty.upper() == 'AN' and (int(c.time[i]) % int(c.dtime)) == 0) or</span> 438 <span class="c1"># (ty.upper() != 'AN' and (int(c.step[i]) % int(c.dtime)) == 0 and</span> 439 <span class="c1"># (int(c.step[i]) % int(c.dtime) == 0)) ) and \</span> 440 <span class="c1"># (int(c.time[i]) in btlist or c.purefc):</span> 441 442 <span class="k">if</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="ow">in</span> <span class="n">btlist</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 443 444 <span class="k">if</span> <span class="p">((</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> 445 <span class="p">(</span><span class="n">ty</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">'AN'</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">st</span><span class="p">)</span> <span class="o">%</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)):</span> 446 447 <span class="k">if</span> <span class="n">ty</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> 448 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> 449 450 <span class="k">if</span> <span class="n">ti</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> 451 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]:</span> 452 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> 453 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'times'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">ti</span> 454 455 <span class="k">if</span> <span class="n">st</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> 456 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]:</span> 457 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> 458 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">ty</span><span class="p">][</span><span class="s1">'steps'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">st</span> 459 <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> 460 <span class="k">return</span> 461 462 <span class="k">def</span> <span class="nf">_create_field_types_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 463 <span class="sd">'''Create the combination of field type, time and forecast step</span> 464 <span class="sd"> for the flux data.</span> 465 466 <span class="sd"> Parameters:</span> 467 <span class="sd"> -----------</span> 468 469 <span class="sd"> Return</span> 470 <span class="sd"> ------</span> 471 472 <span class="sd"> '''</span> 473 <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctype</span><span class="p">)]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'times'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">acctime</span><span class="p">),</span> 474 <span class="s1">'steps'</span><span class="p">:</span> <span class="s1">'</span><span class="si">{}</span><span class="s1">/to/</span><span class="si">{}</span><span class="s1">/by/</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> 475 <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> 476 <span class="bp">self</span><span class="o">.</span><span class="n">accmaxstep</span><span class="p">,</span> 477 <span class="bp">self</span><span class="o">.</span><span class="n">dtime</span><span class="p">)}</span> 478 <span class="k">return</span> 479 480 <span class="k">def</span> <span class="nf">_create_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gauss</span><span class="p">,</span> <span class="n">eta</span><span class="p">,</span> <span class="n">omega</span><span class="p">,</span> <span class="n">cwc</span><span class="p">,</span> <span class="n">wrf</span><span class="p">):</span> 481 <span class="sd">'''Define the specific parameter settings for retrievment.</span> 482 483 <span class="sd"> The different parameters need specific grid types and level types</span> 484 <span class="sd"> for retrievement. We might get following combination of types</span> 485 <span class="sd"> (depending on selection and availability):</span> 486 <span class="sd"> (These are short cuts for the grib file names (leading sequence)</span> 487 <span class="sd"> SH__ML, OG__ML, GG__ML, SH__SL, OG__SL, GG__SL, OG_OROLSM_SL</span> 488 <span class="sd"> where:</span> 489 <span class="sd"> SH = Spherical Harmonics, GG = Gaussian Grid, OG = Output Grid,</span> 490 <span class="sd"> ML = Model Level, SL = Surface Level</span> 491 492 <span class="sd"> For each of this combination there is a list of parameter names,</span> 493 <span class="sd"> the level type, the level list and the grid resolution.</span> 494 495 <span class="sd"> There are different scenarios for data extraction from MARS:</span> 496 <span class="sd"> 1) Retrieval of etadot</span> 497 <span class="sd"> eta=1, gauss=0, omega=0</span> 498 <span class="sd"> 2) Calculation of etadot from divergence</span> 499 <span class="sd"> eta=0, gauss=1, omega=0</span> 500 <span class="sd"> 3) Calculation of etadot from omega (for makes sense for debugging)</span> 501 <span class="sd"> eta=0, gauss=0, omega=1</span> 502 <span class="sd"> 4) Retrieval and Calculation of etadot (only for debugging)</span> 503 <span class="sd"> eta=1, gauss=1, omega=0</span> 504 <span class="sd"> 5) Download also specific model and surface level data for FLEXPART-WRF</span> 505 506 <span class="sd"> Parameters:</span> 507 <span class="sd"> -----------</span> 508 <span class="sd"> gauss : int</span> 509 <span class="sd"> Gaussian grid is retrieved.</span> 510 511 <span class="sd"> eta : int</span> 512 <span class="sd"> Etadot parameter will be directly retrieved.</span> 513 514 <span class="sd"> omega : int</span> 515 <span class="sd"> The omega paramterwill be retrieved.</span> 516 517 <span class="sd"> cwc : int</span> 518 <span class="sd"> The cloud liquid and ice water content will be retrieved.</span> 519 520 <span class="sd"> wrf : int</span> 521 <span class="sd"> Additional model level and surface level data will be retrieved for</span> 522 <span class="sd"> WRF/FLEXPART-WRF simulations.</span> 523 524 <span class="sd"> Return</span> 525 <span class="sd"> ------</span> 526 527 <span class="sd"> '''</span> 528 <span class="c1"># SURFACE FIELDS</span> 529 <span class="c1">#-----------------------------------------------------------------------</span> 530 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'LNSP'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> 531 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SD/MSL/TCC/10U/10V/2T/2D/Z/LSM'</span><span class="p">,</span> \ 532 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 533 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span><span class="p">:</span> 534 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">addpar</span> 535 536 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EP'</span><span class="p">:</span> 537 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/FSR"</span><span class="p">,</span> 538 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 539 <span class="k">else</span><span class="p">:</span> 540 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_OROLSM__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"SDOR/CVL/CVH/SR"</span><span class="p">,</span> \ 541 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 542 543 <span class="c1"># MODEL LEVEL FIELDS</span> 544 <span class="c1">#-----------------------------------------------------------------------</span> 545 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'T/Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 546 547 <span class="k">if</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="n">eta</span><span class="p">:</span> 548 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V/ETADOT'</span> 549 <span class="k">elif</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> 550 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ 551 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 552 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'SH__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">]</span> 553 <span class="k">elif</span> <span class="ow">not</span> <span class="n">gauss</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">eta</span><span class="p">:</span> 554 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/U/V'</span> 555 <span class="k">else</span><span class="p">:</span> 556 <span class="nb">print</span><span class="p">(</span><span class="s1">'Warning: Collecting etadot and parameters for gaussian grid </span><span class="se">\</span> 557 <span class="s1"> is a very costly parameter combination, </span><span class="se">\</span> 558 <span class="s1"> use this combination only for debugging!'</span><span class="p">)</span> 559 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Q'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> \ 560 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 561 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'GG__ML'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U/V/D/77'</span><span class="p">,</span> <span class="s1">'ML'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">glevelist</span><span class="p">,</span> \ 562 <span class="s1">'</span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span> 563 564 <span class="k">if</span> <span class="n">omega</span><span class="p">:</span> 565 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/W'</span> 566 567 <span class="k">if</span> <span class="n">cwc</span><span class="p">:</span> 568 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/CLWC/CIWC'</span> 569 570 <span class="c1"># ADDITIONAL FIELDS FOR FLEXPART-WRF MODEL (IF QUESTIONED)</span> 571 <span class="c1">#-----------------------------------------------------------------------</span> 572 <span class="k">if</span> <span class="n">wrf</span><span class="p">:</span> 573 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/Z/VO'</span> 574 <span class="k">if</span> <span class="s1">'/D'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> 575 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__ML'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/D'</span> 576 <span class="n">wrf_sfc</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'SP'</span><span class="p">,</span><span class="s1">'SKT'</span><span class="p">,</span><span class="s1">'SST'</span><span class="p">,</span><span class="s1">'CI'</span><span class="p">,</span><span class="s1">'STL1'</span><span class="p">,</span><span class="s1">'STL2'</span><span class="p">,</span> <span class="s1">'STL3'</span><span class="p">,</span><span class="s1">'STL4'</span><span class="p">,</span> 577 <span class="s1">'SWVL1'</span><span class="p">,</span><span class="s1">'SWVL2'</span><span class="p">,</span><span class="s1">'SWVL3'</span><span class="p">,</span><span class="s1">'SWVL4'</span><span class="p">]</span> 578 <span class="k">for</span> <span class="n">par</span> <span class="ow">in</span> <span class="n">wrf_sfc</span><span class="p">:</span> 579 <span class="k">if</span> <span class="n">par</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> 580 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG__SL'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">par</span> 581 582 <span class="k">return</span> 583 584 585 <span class="k">def</span> <span class="nf">_create_params_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 586 <span class="sd">'''Define the parameter setting for flux data.</span> 587 588 <span class="sd"> Flux data are accumulated fields in time and are stored on the</span> 589 <span class="sd"> surface level. The leading short cut name for the grib files is:</span> 590 <span class="sd"> "OG_acc_SL" with OG for Regular Output Grid, SL for Surface Level, and</span> 591 <span class="sd"> acc for Accumulated Grid.</span> 592 <span class="sd"> The params dictionary stores a list of parameter names, the level type,</span> 593 <span class="sd"> the level list and the grid resolution.</span> 594 595 <span class="sd"> The flux data are: LSP/CP/SSHF/EWSS/NSSS/SSR</span> 596 597 <span class="sd"> Parameters:</span> 598 <span class="sd"> -----------</span> 599 600 <span class="sd"> Return</span> 601 <span class="sd"> ------</span> 602 603 <span class="sd"> '''</span> 604 <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'OG_acc_SL'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"LSP/CP/SSHF/EWSS/NSSS/SSR"</span><span class="p">,</span> \ 605 <span class="s1">'SFC'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">]</span> 452 606 <span class="k">return</span> 453 607 … … 459 613 <span class="sd"> Parameters</span> 460 614 <span class="sd"> ----------</span> 461 <span class="sd"> ftype : :obj:`string`</span>615 <span class="sd"> ftype : str</span> 462 616 <span class="sd"> Shortcut name of the type of the field. E.g. AN, FC, PF, ...</span> 463 617 464 <span class="sd"> param : :obj:`string`</span>618 <span class="sd"> param : str</span> 465 619 <span class="sd"> Shortcut of the grid type. E.g. SH__ML, SH__SL, GG__ML,</span> 466 620 <span class="sd"> GG__SL, OG__ML, OG__SL, OG_OROLSM_SL, OG_acc_SL</span> 467 621 468 <span class="sd"> date : :obj:`string`</span>622 <span class="sd"> date : str</span> 469 623 <span class="sd"> The date period of the grib data to be stored in this file.</span> 470 624 471 625 <span class="sd"> Return</span> 472 626 <span class="sd"> ------</span> 473 <span class="sd"> targetname : :obj:`string`</span>627 <span class="sd"> targetname : str</span> 474 628 <span class="sd"> The target filename for the grib data.</span> 475 629 <span class="sd"> '''</span> … … 486 640 <span class="sd"> Parameters</span> 487 641 <span class="sd"> ----------</span> 488 <span class="sd"> request : :obj:`integer`</span>642 <span class="sd"> request : int</span> 489 643 <span class="sd"> Selects the mode of retrieval.</span> 490 644 <span class="sd"> 0: Retrieves the data from ECMWF.</span> … … 492 646 <span class="sd"> 2: Retrieves the data and prints the mars request.</span> 493 647 494 <span class="sd"> par_dict : :obj:`dictionary`</span>648 <span class="sd"> par_dict : dictionary</span> 495 649 <span class="sd"> Contains all parameter which have to be set for creating the</span> 496 650 <span class="sd"> Mars Retrievals. The parameter are:</span> … … 548 702 <span class="sd"> Parameters</span> 549 703 <span class="sd"> ----------</span> 550 <span class="sd"> keys : :obj:`dictionary`</span>704 <span class="sd"> keys : dictionary</span> 551 705 <span class="sd"> List of parameter names which serves as index.</span> 552 706 553 <span class="sd"> inputfiles : :obj:`UioFiles`</span>707 <span class="sd"> inputfiles : UioFiles</span> 554 708 <span class="sd"> Contains a list of files.</span> 555 709 556 710 <span class="sd"> Return</span> 557 711 <span class="sd"> ------</span> 558 <span class="sd"> iid : :obj:`grib_index`</span>712 <span class="sd"> iid : codes_index</span> 559 713 <span class="sd"> This is a grib specific index structure to access</span> 560 714 <span class="sd"> messages in a file.</span> 561 715 562 <span class="sd"> index_vals : :obj:`list`</span>716 <span class="sd"> index_vals : list of list of str</span> 563 717 <span class="sd"> Contains the values from the keys used for a distinct selection</span> 564 718 <span class="sd"> of grib messages in processing the grib files.</span> … … 573 727 <span class="n">indexfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_GRIB_INDEX</span><span class="p">)</span> 574 728 <span class="n">silent_remove</span><span class="p">(</span><span class="n">indexfile</span><span class="p">)</span> 575 <span class="n">grib</span> <span class="o">=</span> <span class="n">Grib Tools</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">)</span>729 <span class="n">grib</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> 576 730 <span class="c1"># creates new index file</span> 577 731 <span class="n">iid</span> <span class="o">=</span> <span class="n">grib</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">index_keys</span><span class="o">=</span><span class="n">index_keys</span><span class="p">,</span> <span class="n">index_file</span><span class="o">=</span><span class="n">indexfile</span><span class="p">)</span> … … 580 734 <span class="n">index_vals</span> <span class="o">=</span> <span class="p">[]</span> 581 735 <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">index_keys</span><span class="p">:</span> 582 <span class="c1">#index_vals.append(grib_index_get(iid, key))</span> 583 <span class="c1">#print(index_vals[-1])</span> 584 <span class="n">key_vals</span> <span class="o">=</span> <span class="n">grib_index_get</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> 585 <span class="nb">print</span><span class="p">(</span><span class="n">key_vals</span><span class="p">)</span> 586 <span class="c1"># have to sort the steps for disaggregation,</span> 736 <span class="n">key_vals</span> <span class="o">=</span> <span class="n">codes_index_get</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> 737 <span class="c1"># have to sort the key values for correct disaggregation,</span> 587 738 <span class="c1"># therefore convert to int first</span> 588 <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">'step'</span><span class="p">:</span> 589 <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> 590 <span class="n">key_vals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> 591 <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> 739 <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> 740 <span class="n">key_vals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> 741 <span class="n">key_vals</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_vals</span><span class="p">]</span> 592 742 <span class="n">index_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key_vals</span><span class="p">)</span> 593 743 <span class="c1"># index_vals looks for example like:</span> … … 606 756 <span class="sd"> Parameters</span> 607 757 <span class="sd"> ----------</span> 608 <span class="sd"> server : :obj:`ECMWFService` or :obj:`ECMWFDataServer`</span>758 <span class="sd"> server : ECMWFService or ECMWFDataServer</span> 609 759 <span class="sd"> The connection to the ECMWF server. This is different</span> 610 760 <span class="sd"> for member state users which have full access and non</span> … … 614 764 <span class="sd"> for member state users its False (ECMWFService)</span> 615 765 616 <span class="sd"> dates : :obj:`string`</span>766 <span class="sd"> dates : str</span> 617 767 <span class="sd"> Contains start and end date of the retrieval in the format</span> 618 768 <span class="sd"> "YYYYMMDD/to/YYYYMMDD"</span> 619 769 620 <span class="sd"> request : :obj:`integer`</span>770 <span class="sd"> request : int</span> 621 771 <span class="sd"> Selects the mode of retrieval.</span> 622 772 <span class="sd"> 0: Retrieves the data from ECMWF.</span> … … 624 774 <span class="sd"> 2: Retrieves the data and prints the mars request.</span> 625 775 626 <span class="sd"> inputdir : :obj:`string`, optional</span>776 <span class="sd"> inputdir : str, optional</span> 627 777 <span class="sd"> Path to the directory where the retrieved data is about</span> 628 778 <span class="sd"> to be stored. The default is the current directory ('.').</span> … … 693 843 <span class="n">retr_param_dict</span><span class="p">[</span><span class="s1">'gaussian'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gaussian</span> 694 844 695 <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG__SL'</span><span class="p">:</span>696 <span class="k">pass</span>697 845 <span class="k">if</span> <span class="n">pk</span> <span class="o">==</span> <span class="s1">'OG_OROLSM__SL'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">oro</span><span class="p">:</span> 698 846 <span class="n">oro</span> <span class="o">=</span> <span class="kc">True</span> … … 814 962 <span class="sd"> Parameters</span> 815 963 <span class="sd"> ----------</span> 816 <span class="sd"> c : :obj:`ControlFile`</span>964 <span class="sd"> c : ControlFile</span> 817 965 <span class="sd"> Contains all the parameters of CONTROL file and</span> 818 966 <span class="sd"> command line.</span> 819 967 820 <span class="sd"> filename : :obj:`string`</span>968 <span class="sd"> filename : str</span> 821 969 <span class="sd"> Name of the namelist file.</span> 822 970 … … 828 976 <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> 829 977 <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> 830 831 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 832 <span class="n">namelist_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">,</span> 833 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 834 835 <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> 836 <span class="n">area</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> 837 <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> 838 839 <span class="k">if</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> 840 <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">360</span> 841 <span class="n">maxl</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> 842 <span class="n">maxb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> 843 844 <span class="n">stream</span> <span class="o">=</span> <span class="n">namelist_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 845 <span class="n">maxl</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxl</span><span class="p">),</span> 846 <span class="n">maxb</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxb</span><span class="p">),</span> 847 <span class="n">mlevel</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">),</span> 848 <span class="n">mlevelist</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">),</span> 849 <span class="n">mnauf</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">),</span> 850 <span class="n">metapar</span> <span class="o">=</span> <span class="s1">'77'</span><span class="p">,</span> 851 <span class="n">rlo0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> 852 <span class="n">rlo1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> 853 <span class="n">rla0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> 854 <span class="n">rla1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> 855 <span class="n">momega</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">),</span> 856 <span class="n">momegadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omegadiff</span><span class="p">),</span> 857 <span class="n">mgauss</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">),</span> 858 <span class="n">msmooth</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">smooth</span><span class="p">),</span> 859 <span class="n">meta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">),</span> 860 <span class="n">metadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">etadiff</span><span class="p">),</span> 861 <span class="n">mdpdeta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dpdeta</span><span class="p">)</span> 862 <span class="p">)</span> 863 864 <span class="n">namelistfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_NAMELIST</span><span class="p">)</span> 865 866 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">namelistfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 867 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 978 <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> 979 980 <span class="k">try</span><span class="p">:</span> 981 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 982 <span class="n">namelist_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">,</span> 983 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 984 985 <span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> 986 <span class="n">area</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">area</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> 987 <span class="n">grid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">))</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> 988 989 <span class="k">if</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> 990 <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">360</span> 991 <span class="n">maxl</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> 992 <span class="n">maxb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> 993 994 <span class="n">stream</span> <span class="o">=</span> <span class="n">namelist_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 995 <span class="n">maxl</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxl</span><span class="p">),</span> 996 <span class="n">maxb</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">maxb</span><span class="p">),</span> 997 <span class="n">mlevel</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">),</span> 998 <span class="n">mlevelist</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">levelist</span><span class="p">),</span> 999 <span class="n">mnauf</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resol</span><span class="p">),</span> 1000 <span class="n">metapar</span> <span class="o">=</span> <span class="s1">'77'</span><span class="p">,</span> 1001 <span class="n">rlo0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> 1002 <span class="n">rlo1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> 1003 <span class="n">rla0</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> 1004 <span class="n">rla1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">area</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> 1005 <span class="n">momega</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omega</span><span class="p">),</span> 1006 <span class="n">momegadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">omegadiff</span><span class="p">),</span> 1007 <span class="n">mgauss</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">gauss</span><span class="p">),</span> 1008 <span class="n">msmooth</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">smooth</span><span class="p">),</span> 1009 <span class="n">meta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">eta</span><span class="p">),</span> 1010 <span class="n">metadiff</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">etadiff</span><span class="p">),</span> 1011 <span class="n">mdpdeta</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dpdeta</span><span class="p">)</span> 1012 <span class="p">)</span> 1013 <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 1014 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 1015 1016 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate namelist '</span> <span class="o">+</span> 1017 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> 1018 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 1019 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 1020 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 1021 1022 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 1023 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_NAMELIST</span><span class="p">)</span> 1024 1025 <span class="k">try</span><span class="p">:</span> 1026 <span class="n">namelistfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_NAMELIST</span><span class="p">)</span> 1027 1028 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">namelistfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 1029 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 1030 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 1031 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 1032 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 1033 1034 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> 1035 <span class="n">namelistfile</span><span class="p">)</span> 868 1036 869 1037 <span class="k">return</span></div> … … 871 1039 872 1040 <div class="viewcode-block" id="EcFlexpart.deacc_fluxes"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.deacc_fluxes">[docs]</a> <span class="k">def</span> <span class="nf">deacc_fluxes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> 873 <span class="sd">'''Goes through all flux fields in ordered time and de-accumulate</span> 1041 <span class="sd">'''De-accumulate and disaggregate flux data.</span> 1042 1043 <span class="sd"> Goes through all flux fields in ordered time and de-accumulate</span> 874 1044 <span class="sd"> the fields. Afterwards the fields are disaggregated in time.</span> 875 1045 <span class="sd"> Different versions of disaggregation is provided for rainfall</span> … … 879 1049 <span class="sd"> Parameters</span> 880 1050 <span class="sd"> ----------</span> 881 <span class="sd"> inputfiles : :obj:`UioFiles`</span>882 <span class="sd"> Contains a list of files.</span>883 884 <span class="sd"> c : :obj:`ControlFile`</span>1051 <span class="sd"> inputfiles : UioFiles</span> 1052 <span class="sd"> Contains the list of files that contain flux data.</span> 1053 1054 <span class="sd"> c : ControlFile</span> 885 1055 <span class="sd"> Contains all the parameters of CONTROL file and</span> 886 1056 <span class="sd"> command line.</span> … … 905 1075 <span class="c1"># index_vals looks like e.g.:</span> 906 1076 <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> 907 <span class="c1"># index_vals[1]: ('0', '1200', '1800', '600') ; time</span> 908 <span class="c1"># index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> 909 910 <span class="n">valsdict</span> <span class="o">=</span> <span class="p">{}</span> 911 <span class="n">svalsdict</span> <span class="o">=</span> <span class="p">{}</span> 912 <span class="c1"># stepsdict = {}</span> 1077 <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> 1078 <span class="c1"># index_vals[2]: ('0', '3', '6', '9', '12') ; stepRange</span> 1079 1080 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> 1081 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1082 <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'00'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1083 <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'23'</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1084 <span class="k">else</span><span class="p">:</span> 1085 <span class="n">sdate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> 1086 <span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">sdate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1087 <span class="n">edate_str</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> 1088 <span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">edate_str</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1089 <span class="n">end_date</span> <span class="o">=</span> <span class="n">end_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> 1090 1091 <span class="n">info</span> <span class="o">=</span> <span class="n">get_informations</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> 1092 <span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> 1093 <span class="n">dims</span> <span class="o">=</span> <span class="n">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> 1094 <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">)</span> 1095 <span class="c1"># create numpy array</span> 1096 <span class="n">lsp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> 1097 <span class="n">cp_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">dims</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">dims</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dims</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> 1098 <span class="n">it_lsp</span> <span class="o">=</span> <span class="mi">0</span> 1099 <span class="n">it_cp</span> <span class="o">=</span> <span class="mi">0</span> 1100 <span class="n">date_list</span> <span class="o">=</span> <span class="p">[]</span> 1101 <span class="n">step_list</span> <span class="o">=</span> <span class="p">[]</span> 1102 1103 <span class="c1"># initialize dictionaries to store values</span> 1104 <span class="n">orig_vals</span> <span class="o">=</span> <span class="p">{}</span> 1105 <span class="n">deac_vals</span> <span class="o">=</span> <span class="p">{}</span> 913 1106 <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">:</span> 914 <span class="n">valsdict</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">p</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> 915 <span class="n">svalsdict</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">p</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[]</span> 916 <span class="c1"># stepsdict[str(p)] = []</span> 917 918 <span class="nb">print</span><span class="p">(</span><span class="s1">'maxstep: '</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span> 1107 <span class="n">orig_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> 1108 <span class="n">deac_vals</span><span class="p">[</span><span class="n">p</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> 919 1109 920 1110 <span class="c1"># "product" genereates each possible combination between the</span> … … 924 1114 <span class="c1"># ( date ,time, step)</span> 925 1115 926 <span class="nb">print</span><span class="p">(</span><span class="s1">' current product: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span>1116 <span class="nb">print</span><span class="p">(</span><span class="s1">'CURRENT PRODUCT: '</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span> 927 1117 928 1118 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> 929 <span class="n"> grib_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>1119 <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> 930 1120 931 1121 <span class="c1"># get first id from current product</span> 932 <span class="n">gid</span> <span class="o">=</span> <span class="n"> grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span>1122 <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 933 1123 934 1124 <span class="c1"># if there is no data for this specific time combination / product</span> … … 938 1128 939 1129 <span class="c1"># create correct timestamp from the three time informations</span> 940 <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> 941 <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span> 942 <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> 1130 <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> 1131 <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span> <span class="c1"># integer</span> 1132 <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> 1133 <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">time</span><span class="p">)</span> 1134 <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> 1135 943 1136 <span class="n">t_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 944 <span class="n">t_dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n b">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span>945 <span class="n">t_m1dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n b">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">)</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span>946 <span class="n">t_m2dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n b">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">)</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span>1137 <span class="n">t_dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="p">)</span> 1138 <span class="n">t_m1dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1139 <span class="n">t_m2dt</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 947 1140 <span class="n">t_enddate</span> <span class="o">=</span> <span class="kc">None</span> 948 1141 949 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n"> maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span>1142 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 950 1143 <span class="n">fnout</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'flux'</span> <span class="o">+</span> 951 1144 <span class="n">t_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> … … 966 1159 967 1160 <span class="nb">print</span><span class="p">(</span><span class="s2">"outputfile = "</span> <span class="o">+</span> <span class="n">fnout</span><span class="p">)</span> 968 969 <span class="c1"># read message for message and store relevant data fields</span> 1161 <span class="n">f_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> 1162 <span class="n">h_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">hnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> 1163 <span class="n">g_handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">gnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> 1164 1165 <span class="c1"># read message for message and store relevant data fields, where</span> 970 1166 <span class="c1"># data keywords are stored in pars</span> 971 <span class="k">while</span> <span class=" mi">1</span><span class="p">:</span>1167 <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> 972 1168 <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> 973 1169 <span class="k">break</span> 974 <span class="n">cparamId</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">))</span> 975 <span class="n">step</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> 976 <span class="n">time</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> 977 <span class="n">ni</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Ni'</span><span class="p">)</span> 978 <span class="n">nj</span> <span class="o">=</span> <span class="n">grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Nj'</span><span class="p">)</span> 979 <span class="k">if</span> <span class="n">cparamId</span> <span class="ow">in</span> <span class="n">valsdict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> 980 <span class="n">values</span> <span class="o">=</span> <span class="n">grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 981 <span class="n">vdp</span> <span class="o">=</span> <span class="n">valsdict</span><span class="p">[</span><span class="n">cparamId</span><span class="p">]</span> 982 <span class="n">svdp</span> <span class="o">=</span> <span class="n">svalsdict</span><span class="p">[</span><span class="n">cparamId</span><span class="p">]</span> 983 <span class="c1"># sd = stepsdict[cparamId]</span> 984 985 <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> 986 <span class="n">fak</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="mf">1000.</span> 1170 <span class="n">parId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> <span class="c1"># integer</span> 1171 <span class="n">step</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">)</span> <span class="c1"># integer</span> 1172 <span class="n">time</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span> <span class="c1"># integer</span> 1173 <span class="n">ni</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Ni'</span><span class="p">)</span> <span class="c1"># integer</span> 1174 <span class="n">nj</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'Nj'</span><span class="p">)</span> <span class="c1"># integer</span> 1175 <span class="k">if</span> <span class="n">parId</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">orig_vals</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> 1176 <span class="c1"># parameter is not a flux, find next one</span> 1177 <span class="k">continue</span> 1178 1179 <span class="c1"># define conversion factor</span> 1180 <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> 1181 <span class="n">fak</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="mf">1000.</span> 1182 <span class="k">else</span><span class="p">:</span> 1183 <span class="n">fak</span> <span class="o">=</span> <span class="mf">3600.</span> 1184 1185 <span class="c1"># get parameter values and reshape</span> 1186 <span class="n">values</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1187 <span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="p">(</span><span class="n">nj</span><span class="p">,</span> <span class="n">ni</span><span class="p">)))</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span> <span class="o">/</span> <span class="n">fak</span> 1188 1189 <span class="c1"># save the original and accumulated values</span> 1190 <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:])</span> 1191 1192 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> <span class="n">step</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">):</span> 1193 <span class="c1"># no de-accumulation needed</span> 1194 <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:]</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1195 <span class="k">else</span><span class="p">:</span> 1196 <span class="c1"># do de-accumulation</span> 1197 <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> 1198 <span class="p">(</span><span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> 1199 <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1200 1201 <span class="c1"># store precipitation if new disaggregation method is selected</span> 1202 <span class="c1"># only the exact days are needed</span> 1203 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> 1204 <span class="k">if</span> <span class="n">start_date</span> <span class="o"><=</span> <span class="n">t_dt</span> <span class="o"><=</span> <span class="n">end_date</span><span class="p">:</span> 1205 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1206 <span class="k">if</span> <span class="n">t_dt</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> 1207 <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_dt</span><span class="p">)</span> 1208 <span class="n">step_list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> 1209 <span class="k">else</span><span class="p">:</span> 1210 <span class="k">if</span> <span class="n">t_date</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> 1211 <span class="n">date_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t_date</span><span class="p">)</span> 1212 <span class="k">if</span> <span class="n">step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">step_list</span><span class="p">:</span> 1213 <span class="n">step_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> 1214 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span><span class="p">:</span> 1215 <span class="n">lsp_np</span><span class="p">[:,</span><span class="n">it_lsp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> 1216 <span class="n">it_lsp</span> <span class="o">+=</span> <span class="mi">1</span> 1217 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> 1218 <span class="n">cp_np</span><span class="p">[:,</span><span class="n">it_cp</span><span class="p">]</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">][:]</span> 1219 <span class="n">it_cp</span> <span class="o">+=</span> <span class="mi">1</span> 1220 1221 <span class="c1"># information printout</span> 1222 <span class="nb">print</span><span class="p">(</span><span class="n">parId</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">),</span> <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> 1223 1224 <span class="c1"># length of deac_vals[parId] corresponds to the</span> 1225 <span class="c1"># number of time steps, max. 4 are needed for disaggegration</span> 1226 <span class="c1"># with the old and original method</span> 1227 <span class="c1"># run over all grib messages and perform</span> 1228 <span class="c1"># shifting in time</span> 1229 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> 1230 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> 1231 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">):</span> 1232 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> 1233 <span class="k">else</span><span class="p">:</span> 1234 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])</span> 1235 1236 <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> \ 1237 <span class="ow">or</span> <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">):</span> 1238 <span class="c1"># remove first time step in list to shift</span> 1239 <span class="c1"># time line</span> 1240 <span class="n">orig_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> 1241 <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> 987 1242 <span class="k">else</span><span class="p">:</span> 988 <span class="n">fak</span> <span class="o">=</span> <span class="mf">3600.</span> 989 990 <span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="p">(</span><span class="n">nj</span><span class="p">,</span> <span class="n">ni</span><span class="p">)))</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span> <span class="o">/</span> <span class="n">fak</span> 991 <span class="n">vdp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:])</span> <span class="c1"># save the accumulated values</span> 992 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'EA'</span> <span class="ow">or</span> \ 993 <span class="n">step</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">):</span> 994 <span class="n">svdp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">[:]</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 995 <span class="k">else</span><span class="p">:</span> <span class="c1"># deaccumulate values</span> 996 <span class="n">svdp</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">vdp</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">vdp</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 997 998 <span class="nb">print</span><span class="p">(</span><span class="n">cparamId</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">),</span> 999 <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">values</span><span class="p">))</span> 1000 1001 <span class="c1"># len(svdp) correspond to the time</span> 1002 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> 1003 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> 1004 <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> 1005 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> 1006 <span class="k">else</span><span class="p">:</span> 1007 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="n">svdp</span><span class="p">)</span> 1008 1009 <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span> \ 1010 <span class="ow">or</span> <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">):</span> 1011 <span class="n">vdp</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> 1012 <span class="n">svdp</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> 1243 <span class="c1"># if the third time step is read (per parId),</span> 1244 <span class="c1"># write out the first one as a boundary value</span> 1245 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1246 <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> 1013 1247 <span class="k">else</span><span class="p">:</span> 1014 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> 1015 <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> 1016 <span class="k">else</span><span class="p">:</span> 1017 <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> 1018 1019 <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1020 1021 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span> 1022 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> 1248 <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> 1249 1250 <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">rrint</span> <span class="ow">and</span> <span class="p">(</span><span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">)):</span> 1251 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1252 1253 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1254 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">)))</span> 1023 1255 <span class="k">else</span><span class="p">:</span> 1024 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1025 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">t_m2dt</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> 1026 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> 1027 1028 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_handle</span><span class="p">:</span> 1029 <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">f_handle</span><span class="p">)</span> 1256 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1257 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">t_m2dt</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> 1258 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">t_m2dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> 1259 1260 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">f_handle</span><span class="p">)</span> 1030 1261 1031 1262 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> 1032 <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> 1033 <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">,</span> 1263 <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">,</span> 1034 1264 <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1035 1265 <span class="k">else</span><span class="p">:</span> 1036 1266 <span class="n">t_enddate</span> <span class="o">=</span> <span class="n">t_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1037 1267 1038 <span class="c1"># squeeze out information of last two steps contained</span> 1039 <span class="c1"># in svdp</span> 1040 <span class="c1"># if step+int(c.dtime) == c.maxstep and c.maxstep>12</span> 1041 <span class="c1"># or t_dt+timedelta(hours = int(c.dtime))</span> 1042 <span class="c1"># >= t_enddate:</span> 1043 <span class="c1"># Note that svdp[0] has not been popped in this case</span> 1044 1045 <span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">12</span> <span class="ow">or</span> \ 1046 <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">:</span> 1047 1048 <span class="n">values</span> <span class="o">=</span> <span class="n">svdp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> 1049 <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1050 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1051 <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span> 1052 <span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1053 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> 1054 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">year</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> 1055 <span class="n">truedatetime</span><span class="o">.</span><span class="n">month</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> 1056 <span class="n">truedatetime</span><span class="o">.</span><span class="n">day</span><span class="p">)</span> 1057 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">hnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">h_handle</span><span class="p">:</span> 1058 <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> 1059 1060 <span class="c1">#values = (svdp[1]+svdp[2])/2.</span> 1061 <span class="k">if</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'142'</span> <span class="ow">or</span> <span class="n">cparamId</span> <span class="o">==</span> <span class="s1">'143'</span><span class="p">:</span> 1062 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">svdp</span><span class="p">)))</span> 1063 <span class="k">else</span><span class="p">:</span> 1064 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">svdp</span><span class="p">)))</span> 1065 1066 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1067 <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1068 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> 1069 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">year</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> 1070 <span class="n">truedatetime</span><span class="o">.</span><span class="n">month</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> 1071 <span class="n">truedatetime</span><span class="o">.</span><span class="n">day</span><span class="p">)</span> 1072 <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1073 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">gnout</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">g_handle</span><span class="p">:</span> 1074 <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> 1075 1076 <span class="n">grib_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1077 1078 <span class="n">gid</span> <span class="o">=</span> <span class="n">grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1079 1080 <span class="n">grib_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1268 <span class="c1"># squeeze out information of last two steps</span> 1269 <span class="c1"># contained in deac_vals[parId]</span> 1270 <span class="c1"># Note that deac_vals[parId][0] has not been popped</span> 1271 <span class="c1"># in this case</span> 1272 1273 <span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">or</span> \ 1274 <span class="n">t_dt</span> <span class="o">==</span> <span class="n">t_enddate</span><span class="p">:</span> 1275 <span class="c1"># last step</span> 1276 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1277 <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> 1278 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1279 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> 1280 <span class="c1">#truedatetime = t_m2dt + timedelta(hours=2*int(c.dtime))</span> 1281 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> 1282 <span class="k">else</span><span class="p">:</span> 1283 <span class="n">values</span> <span class="o">=</span> <span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span> 1284 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1285 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1286 <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1287 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> 1288 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> 1289 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">h_handle</span><span class="p">)</span> 1290 1291 <span class="k">if</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">142</span> <span class="ow">or</span> <span class="n">parId</span> <span class="o">==</span> <span class="mi">143</span><span class="p">:</span> 1292 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">darain</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> 1293 <span class="k">else</span><span class="p">:</span> 1294 <span class="n">values</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">dapoly</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">deac_vals</span><span class="p">[</span><span class="n">parId</span><span class="p">])))</span> 1295 1296 <span class="c1"># step before last step</span> 1297 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1298 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="n">step</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1299 <span class="c1">#truedatetime = t_m2dt + timedelta(hours=int(c.dtime))</span> 1300 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1301 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> 1302 <span class="k">else</span><span class="p">:</span> 1303 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'stepRange'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> 1304 <span class="n">truedatetime</span> <span class="o">=</span> <span class="n">t_m2dt</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">dtime</span><span class="p">))</span> 1305 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">,</span> <span class="n">truedatetime</span><span class="o">.</span><span class="n">hour</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span> 1306 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">truedatetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)))</span> 1307 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span> 1308 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">g_handle</span><span class="p">)</span> 1309 1310 <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1311 1312 <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1313 1314 <span class="n">f_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 1315 <span class="n">g_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 1316 <span class="n">h_handle</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 1317 1318 <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1319 1320 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">rrint</span><span class="p">:</span> 1321 <span class="bp">self</span><span class="o">.</span><span class="n">_create_rr_grib_dummy</span><span class="p">(</span><span class="n">inputfiles</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> 1322 1323 <span class="bp">self</span><span class="o">.</span><span class="n">_prep_new_rrint</span><span class="p">(</span><span class="n">ni</span><span class="p">,</span> <span class="n">nj</span><span class="p">,</span> <span class="n">lsp_np</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">lsp_np</span><span class="p">,</span> 1324 <span class="n">cp_np</span><span class="p">,</span> <span class="n">date_list</span><span class="p">,</span> <span class="n">step_list</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> 1081 1325 1082 1326 <span class="k">return</span></div> 1083 1327 1328 <span class="k">def</span> <span class="nf">_prep_new_rrint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ni</span><span class="p">,</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span><span class="p">,</span> <span class="n">lsp_np</span><span class="p">,</span> <span class="n">cp_np</span><span class="p">,</span> <span class="n">date_list</span><span class="p">,</span> <span class="n">step_list</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> 1329 <span class="sd">'''Calculates and writes out the disaggregated precipitation fields.</span> 1330 1331 <span class="sd"> Disaggregation is done in time and original times are written to the</span> 1332 <span class="sd"> flux files, while the additional subgrid times are written to</span> 1333 <span class="sd"> extra files.</span> 1334 1335 <span class="sd"> Parameters</span> 1336 <span class="sd"> ----------</span> 1337 <span class="sd"> ni : int</span> 1338 <span class="sd"> Amount of zonal grid points.</span> 1339 1340 <span class="sd"> nj : int</span> 1341 <span class="sd"> Amount of meridional grid points.</span> 1342 1343 <span class="sd"> nt : int</span> 1344 <span class="sd"> Number of time steps.</span> 1345 1346 <span class="sd"> lsp_np : numpy array of float</span> 1347 <span class="sd"> The large scale precipitation fields for each time step.</span> 1348 <span class="sd"> Shape (ni * nj, nt).</span> 1349 1350 <span class="sd"> cp_np : numpy array of float</span> 1351 <span class="sd"> The convective precipitation fields for each time step.</span> 1352 <span class="sd"> Shape (ni * nj, nt).</span> 1353 1354 <span class="sd"> date_list : list of datetime</span> 1355 <span class="sd"> The list of dates for which the disaggregation is to be done.</span> 1356 1357 <span class="sd"> step_list : list of int</span> 1358 <span class="sd"> The list of steps for a single forecast time.</span> 1359 <span class="sd"> Only necessary for pure forecasts.</span> 1360 1361 <span class="sd"> c : ControlFile</span> 1362 <span class="sd"> Contains all the parameters of CONTROL file and</span> 1363 <span class="sd"> command line.</span> 1364 1365 <span class="sd"> Return</span> 1366 <span class="sd"> ------</span> 1367 1368 <span class="sd"> '''</span> 1369 <span class="nb">print</span><span class="p">(</span><span class="s1">'... disaggregation or precipitation with new method.'</span><span class="p">)</span> 1370 <span class="n">lsp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> 1371 <span class="n">cp_new_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">ni</span> <span class="o">*</span> <span class="n">nj</span><span class="p">,</span> <span class="n">nt</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> 1372 1373 <span class="c1"># do the disaggregation, but neglect the last value of the</span> 1374 <span class="c1"># time series. This one corresponds for example to 24 hour,</span> 1375 <span class="c1"># which we don't need.</span> 1376 <span class="k">for</span> <span class="n">ix</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ni</span><span class="o">*</span><span class="n">nj</span><span class="p">):</span> 1377 <span class="n">lsp_new_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">lsp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> 1378 <span class="n">cp_new_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">disaggregation</span><span class="o">.</span><span class="n">IA3</span><span class="p">(</span><span class="n">cp_np</span><span class="p">[</span><span class="n">ix</span><span class="p">,:])[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> 1379 1380 <span class="c1"># write to grib files (full/orig times to flux file and inbetween</span> 1381 <span class="c1"># times into seperate end files)</span> 1382 <span class="nb">print</span><span class="p">(</span><span class="s1">'... write disaggregated precipitation to files.'</span><span class="p">)</span> 1383 <span class="n">it</span> <span class="o">=</span> <span class="mi">0</span> 1384 <span class="k">for</span> <span class="n">date</span> <span class="ow">in</span> <span class="n">date_list</span><span class="p">:</span> 1385 <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">step_list</span><span class="p">:</span> 1386 <span class="n">tmpfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'rr_grib_dummy.grb'</span><span class="p">)</span> 1387 1388 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1389 <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ 1390 <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> 1391 <span class="n">filename1</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ 1392 <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_1'</span> 1393 <span class="n">filename2</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">.%H'</span><span class="p">)</span> <span class="o">+</span> \ 1394 <span class="s1">'.</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">step</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_2'</span> 1395 <span class="k">else</span><span class="p">:</span> 1396 <span class="n">fluxfilename</span> <span class="o">=</span> <span class="s1">'flux'</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1397 <span class="n">filename1</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_1'</span> 1398 <span class="n">filename2</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'_2'</span> 1399 1400 <span class="c1"># collect for final processing</span> 1401 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">fluxfilename</span><span class="p">))</span> 1402 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename1</span><span class="p">))</span> 1403 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">filename2</span><span class="p">))</span> 1404 1405 <span class="c1"># write original time step to flux file as usual</span> 1406 <span class="n">fluxfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">fluxfilename</span><span class="p">))</span> 1407 <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1408 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> 1409 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1410 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1411 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="p">]],</span> 1412 <span class="p">)</span> 1413 <span class="n">fluxfile</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1414 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> 1415 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1416 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1417 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="p">]]</span> 1418 <span class="p">)</span> 1419 1420 <span class="c1"># write first subgrid time step</span> 1421 <span class="n">endfile1</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">filename1</span><span class="p">))</span> 1422 <span class="n">endfile1</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1423 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> 1424 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1425 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1426 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> 1427 <span class="p">)</span> 1428 <span class="n">endfile1</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1429 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> 1430 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1431 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1432 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">1</span><span class="p">]]</span> 1433 <span class="p">)</span> 1434 1435 <span class="c1"># write second subgrid time step</span> 1436 <span class="n">endfile2</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">filename2</span><span class="p">))</span> 1437 <span class="n">endfile2</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1438 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> 1439 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1440 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1441 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">lsp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> 1442 <span class="p">)</span> 1443 <span class="n">endfile2</span><span class="o">.</span><span class="n">set_keys</span><span class="p">(</span><span class="n">tmpfile</span><span class="p">,</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> 1444 <span class="n">wherekeynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> <span class="n">wherekeyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> 1445 <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'date'</span><span class="p">,</span><span class="s1">'time'</span><span class="p">,</span><span class="s1">'stepRange'</span><span class="p">,</span><span class="s1">'values'</span><span class="p">],</span> 1446 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)),</span> 1447 <span class="n">date</span><span class="o">.</span><span class="n">hour</span><span class="o">*</span><span class="mi">100</span><span class="p">,</span> <span class="n">step</span><span class="p">,</span> <span class="n">cp_new_np</span><span class="p">[:,</span><span class="n">it</span><span class="o">+</span><span class="mi">2</span><span class="p">]]</span> 1448 <span class="p">)</span> 1449 <span class="n">it</span> <span class="o">=</span> <span class="n">it</span> <span class="o">+</span> <span class="mi">3</span> <span class="c1"># jump to next original time step</span> 1450 <span class="k">return</span> 1451 1452 <span class="k">def</span> <span class="nf">_create_rr_grib_dummy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ifile</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> 1453 <span class="sd">'''Creates a grib file with a dummy message for the two precipitation</span> 1454 <span class="sd"> types lsp and cp each.</span> 1455 1456 <span class="sd"> Parameters</span> 1457 <span class="sd"> ----------</span> 1458 <span class="sd"> ifile : str</span> 1459 <span class="sd"> Filename of the input file to read the grib messages from.</span> 1460 1461 <span class="sd"> inputdir : str, optional</span> 1462 <span class="sd"> Path to the directory where the retrieved data is stored.</span> 1463 1464 <span class="sd"> Return</span> 1465 <span class="sd"> ------</span> 1466 1467 <span class="sd"> '''</span> 1468 1469 <span class="n">gribfile</span> <span class="o">=</span> <span class="n">GribUtil</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span><span class="s1">'rr_grib_dummy.grb'</span><span class="p">))</span> 1470 1471 <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> 1472 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">142</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'w'</span><span class="p">)</span> 1473 1474 <span class="n">gribfile</span><span class="o">.</span><span class="n">copy_dummy_msg</span><span class="p">(</span><span class="n">ifile</span><span class="p">,</span> <span class="n">keynames</span><span class="o">=</span><span class="p">[</span><span class="s1">'paramId'</span><span class="p">],</span> 1475 <span class="n">keyvalues</span><span class="o">=</span><span class="p">[</span><span class="mi">143</span><span class="p">],</span> <span class="n">filemode</span><span class="o">=</span><span class="s1">'a'</span><span class="p">)</span> 1476 1477 <span class="k">return</span> 1084 1478 1085 1479 <div class="viewcode-block" id="EcFlexpart.create"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> … … 1100 1494 <span class="sd"> Parameters</span> 1101 1495 <span class="sd"> ----------</span> 1102 <span class="sd"> inputfiles : :obj:`UioFiles`</span>1496 <span class="sd"> inputfiles : UioFiles</span> 1103 1497 <span class="sd"> Contains a list of files.</span> 1104 1498 1105 <span class="sd"> c : :obj:`ControlFile`</span>1499 <span class="sd"> c : ControlFile</span> 1106 1500 <span class="sd"> Contains all the parameters of CONTROL file and</span> 1107 1501 <span class="sd"> command line.</span> … … 1137 1531 <span class="c1"># index_vals looks like e.g.:</span> 1138 1532 <span class="c1"># index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> 1139 <span class="c1"># index_vals[1]: ('0', ' 1200', '1800', '600') ; time</span>1533 <span class="c1"># index_vals[1]: ('0', '600', '1200', '1800') ; time</span> 1140 1534 <span class="c1"># index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> 1141 1535 … … 1149 1543 1150 1544 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index_keys</span><span class="p">)):</span> 1151 <span class="n"> grib_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>1545 <span class="n">codes_index_select</span><span class="p">(</span><span class="n">iid</span><span class="p">,</span> <span class="n">index_keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prod</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> 1152 1546 1153 1547 <span class="c1"># get first id from current product</span> 1154 <span class="n">gid</span> <span class="o">=</span> <span class="n"> grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span>1548 <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1155 1549 1156 1550 <span class="c1"># if there is no data for this specific time combination / product</span> … … 1158 1552 <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> 1159 1553 <span class="k">continue</span> 1160 1554 <span class="c1">#============================================================================================</span> 1161 1555 <span class="c1"># remove old fort.* files and open new ones</span> 1162 1556 <span class="c1"># they are just valid for a single product</span> … … 1165 1559 <span class="n">silent_remove</span><span class="p">(</span><span class="n">fortfile</span><span class="p">)</span> 1166 1560 <span class="n">fdict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fortfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> 1167 1561 <span class="c1">#============================================================================================</span> 1168 1562 <span class="c1"># create correct timestamp from the three time informations</span> 1169 <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span>1170 <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span>1171 <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span>1563 <span class="n">cdate</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">))</span> 1564 <span class="n">ctime</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>2}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'time'</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span><span class="p">)</span> 1565 <span class="n">cstep</span> <span class="o">=</span> <span class="s1">'</span><span class="si">{:0>3}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'step'</span><span class="p">))</span> 1172 1566 <span class="n">timestamp</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">cdate</span> <span class="o">+</span> <span class="n">ctime</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">%H'</span><span class="p">)</span> 1173 1567 <span class="n">timestamp</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">cstep</span><span class="p">))</span> … … 1189 1583 <span class="s1">'WRF'</span> <span class="o">+</span> <span class="n">cdate</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">ctime</span> <span class="o">+</span> <span class="s1">'.000.grb2'</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">)</span> 1190 1584 <span class="n">olddate</span> <span class="o">=</span> <span class="n">cdate</span><span class="p">[:]</span> 1191 1585 <span class="c1">#============================================================================================</span> 1192 1586 <span class="c1"># savedfields remembers which fields were already used.</span> 1193 1587 <span class="n">savedfields</span> <span class="o">=</span> <span class="p">[]</span> … … 1197 1591 <span class="k">if</span> <span class="ow">not</span> <span class="n">gid</span><span class="p">:</span> 1198 1592 <span class="k">break</span> 1199 <span class="n">paramId</span> <span class="o">=</span> <span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span>1200 <span class="n">gridtype</span> <span class="o">=</span> <span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'gridType'</span><span class="p">)</span>1201 <span class="n">levtype</span> <span class="o">=</span> <span class="n"> grib_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'typeOfLevel'</span><span class="p">)</span>1593 <span class="n">paramId</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">)</span> 1594 <span class="n">gridtype</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'gridType'</span><span class="p">)</span> 1595 <span class="n">levtype</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'typeOfLevel'</span><span class="p">)</span> 1202 1596 <span class="k">if</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">77</span><span class="p">:</span> <span class="c1"># ETADOT</span> 1203 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'21'</span><span class="p">])</span>1597 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'21'</span><span class="p">])</span> 1204 1598 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">130</span><span class="p">:</span> <span class="c1"># T</span> 1205 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'11'</span><span class="p">])</span>1599 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'11'</span><span class="p">])</span> 1206 1600 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">131</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">132</span><span class="p">:</span> <span class="c1"># U, V wind component</span> 1207 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'10'</span><span class="p">])</span>1601 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'10'</span><span class="p">])</span> 1208 1602 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">!=</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q</span> 1209 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'17'</span><span class="p">])</span>1603 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'17'</span><span class="p">])</span> 1210 1604 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">133</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'reduced_gg'</span><span class="p">:</span> <span class="c1"># Q, gaussian</span> 1211 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'18'</span><span class="p">])</span>1605 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'18'</span><span class="p">])</span> 1212 1606 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span> <span class="c1"># W</span> 1213 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'19'</span><span class="p">])</span>1607 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'19'</span><span class="p">])</span> 1214 1608 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">152</span><span class="p">:</span> <span class="c1"># LNSP</span> 1215 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'12'</span><span class="p">])</span>1609 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'12'</span><span class="p">])</span> 1216 1610 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">155</span> <span class="ow">and</span> <span class="n">gridtype</span> <span class="o">==</span> <span class="s1">'sh'</span><span class="p">:</span> <span class="c1"># D</span> 1217 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'13'</span><span class="p">])</span>1611 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'13'</span><span class="p">])</span> 1218 1612 <span class="k">elif</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">246</span> <span class="ow">or</span> <span class="n">paramId</span> <span class="o">==</span> <span class="mi">247</span><span class="p">:</span> <span class="c1"># CLWC, CIWC</span> 1219 1613 <span class="c1"># sum cloud liquid water and ice</span> 1220 1614 <span class="k">if</span> <span class="n">scwc</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> 1221 <span class="n">scwc</span> <span class="o">=</span> <span class="n"> grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span>1615 <span class="n">scwc</span> <span class="o">=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1222 1616 <span class="k">else</span><span class="p">:</span> 1223 <span class="n">scwc</span> <span class="o">+=</span> <span class="n">grib_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1224 <span class="n">grib_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">scwc</span><span class="p">)</span> 1225 <span class="n">grib_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">,</span> <span class="mi">201031</span><span class="p">)</span> 1226 <span class="n">grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'22'</span><span class="p">])</span> 1617 <span class="n">scwc</span> <span class="o">+=</span> <span class="n">codes_get_values</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1618 <span class="n">codes_set_values</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">scwc</span><span class="p">)</span> 1619 <span class="n">codes_set</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="s1">'paramId'</span><span class="p">,</span> <span class="mi">201031</span><span class="p">)</span> 1620 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'22'</span><span class="p">])</span> 1621 <span class="n">scwc</span> <span class="o">=</span> <span class="kc">None</span> 1227 1622 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span> <span class="ow">and</span> <span class="n">paramId</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">129</span><span class="p">,</span> <span class="mi">138</span><span class="p">,</span> <span class="mi">155</span><span class="p">]</span> <span class="ow">and</span> \ 1228 1623 <span class="n">levtype</span> <span class="o">==</span> <span class="s1">'hybrid'</span><span class="p">:</span> <span class="c1"># Z, VO, D</span> … … 1234 1629 <span class="c1"># SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR</span> 1235 1630 <span class="c1"># and all ADDPAR parameter</span> 1236 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'16'</span><span class="p">])</span>1631 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fdict</span><span class="p">[</span><span class="s1">'16'</span><span class="p">])</span> 1237 1632 <span class="n">savedfields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">paramId</span><span class="p">)</span> 1238 1633 <span class="k">else</span><span class="p">:</span> … … 1244 1639 <span class="k">if</span> <span class="n">levtype</span> <span class="o">==</span> <span class="s1">'hybrid'</span> <span class="ow">and</span> \ 1245 1640 <span class="n">paramId</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">129</span><span class="p">,</span> <span class="mi">130</span><span class="p">,</span> <span class="mi">131</span><span class="p">,</span> <span class="mi">132</span><span class="p">,</span> <span class="mi">133</span><span class="p">,</span> <span class="mi">138</span><span class="p">,</span> <span class="mi">155</span><span class="p">]:</span> 1246 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span>1641 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> 1247 1642 <span class="c1"># sfc layer</span> 1248 1643 <span class="k">elif</span> <span class="n">paramId</span> <span class="ow">in</span> <span class="n">wrfpars</span><span class="p">:</span> 1249 <span class="n"> grib_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span>1644 <span class="n">codes_write</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span> <span class="n">fwrf</span><span class="p">)</span> 1250 1645 <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> 1251 1646 <span class="k">pass</span> 1252 1647 1253 <span class="n"> grib_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span>1254 <span class="n">gid</span> <span class="o">=</span> <span class="n"> grib_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span>1255 1648 <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 1649 <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_new_from_index</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1650 <span class="c1">#============================================================================================</span> 1256 1651 <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> 1257 1652 <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 1258 1653 <span class="c1">#============================================================================================</span> 1259 1654 <span class="c1"># call for Fortran program to convert e.g. reduced_gg grids to</span> 1260 1655 <span class="c1"># regular_ll and calculate detadot/dp</span> … … 1267 1662 <span class="n">my_error</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'fort.21 is empty while parameter eta </span><span class="se">\</span> 1268 1663 <span class="s1"> is set to 1 in CONTROL file'</span><span class="p">)</span> 1664 <span class="c1">#============================================================================================</span> 1665 <span class="c1"># write out all output to log file before starting fortran programm</span> 1666 <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> 1269 1667 1270 1668 <span class="c1"># Fortran program creates file fort.15 (with u,v,etadot,t,sp,q)</span> 1271 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> 1272 <span class="n">c</span><span class="o">.</span><span class="n">exedir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> <span class="n">shell</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> 1669 <span class="n">execute_subprocess</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">exedir</span><span class="p">,</span> 1670 <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> 1671 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'FORTRAN PROGRAM FAILED!'</span><span class="p">)</span><span class="c1">#shell=True)</span> 1672 1273 1673 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> 1274 1674 <span class="c1">#============================================================================================</span> 1275 1675 <span class="c1"># create name of final output file, e.g. EN13040500 (ENYYMMDDHH)</span> 1276 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n"> maxstep</span> <span class="o">></span> <span class="mi">12</span><span class="p">:</span>1676 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 1277 1677 <span class="n">suffix</span> <span class="o">=</span> <span class="n">cdate</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">ctime</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">cstep</span> 1278 1678 <span class="k">else</span><span class="p">:</span> … … 1282 1682 <span class="c1"># collect for final processing</span> 1283 1683 <span class="bp">self</span><span class="o">.</span><span class="n">outputfilelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">fnout</span><span class="p">))</span> 1284 1684 <span class="c1">#============================================================================================</span> 1285 1685 <span class="c1"># create outputfile and copy all data from intermediate files</span> 1286 1686 <span class="c1"># to the outputfile (final GRIB input files for FLEXPART)</span> … … 1302 1702 <span class="n">shutil</span><span class="o">.</span><span class="n">copyfileobj</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'fort.25'</span><span class="p">),</span> 1303 1703 <span class="s1">'rb'</span><span class="p">),</span> <span class="n">fout</span><span class="p">)</span> 1304 1704 <span class="c1">#============================================================================================</span> 1305 1705 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">wrf</span><span class="p">:</span> 1306 1706 <span class="n">fwrf</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> 1307 1707 1308 <span class="n"> grib_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span>1708 <span class="n">codes_index_release</span><span class="p">(</span><span class="n">iid</span><span class="p">)</span> 1309 1709 1310 1710 <span class="k">return</span></div> … … 1312 1712 1313 1713 <div class="viewcode-block" id="EcFlexpart.process_output"><a class="viewcode-back" href="../api.html#EcFlexpart.EcFlexpart.process_output">[docs]</a> <span class="k">def</span> <span class="nf">process_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> 1314 <span class="sd">'''The grib files are postprocessed depending on the selection in</span> 1714 <span class="sd">'''Postprocessing of FLEXPART input files.</span> 1715 1716 <span class="sd"> The grib files are postprocessed depending on the selection in</span> 1315 1717 <span class="sd"> CONTROL file. The resulting files are moved to the output</span> 1316 1718 <span class="sd"> directory if its not equal to the input directory.</span> … … 1323 1725 <span class="sd"> Parameters</span> 1324 1726 <span class="sd"> ----------</span> 1325 <span class="sd"> c : :obj:`ControlFile`</span>1727 <span class="sd"> c : ControlFile</span> 1326 1728 <span class="sd"> Contains all the parameters of CONTROL file and</span> 1327 1729 <span class="sd"> command line.</span> … … 1347 1749 1348 1750 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">format</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'grib2'</span><span class="p">:</span> 1349 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'grib_set'</span><span class="p">,</span> <span class="s1">'-s'</span><span class="p">,</span> <span class="s1">'edition=2, </span><span class="se">\</span> 1350 <span class="s1"> productDefinitionTemplateNumber=8'</span><span class="p">,</span> 1351 <span class="n">ofile</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">])</span> 1352 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">])</span> 1751 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'grib_set'</span><span class="p">,</span> <span class="s1">'-s'</span><span class="p">,</span> <span class="s1">'edition=2,'</span> <span class="o">+</span> 1752 <span class="s1">'productDefinitionTemplateNumber=8'</span><span class="p">,</span> 1753 <span class="n">ofile</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">],</span> 1754 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'GRIB2 CONVERSION FAILED!'</span><span class="p">)</span> 1755 1756 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">ofile</span> <span class="o">+</span> <span class="s1">'_2'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> 1757 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RENAMING FOR NEW GRIB2 FORMAT '</span> 1758 <span class="s1">'FILES FAILED!'</span><span class="p">)</span> 1353 1759 1354 1760 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> 1355 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'-overwrite'</span><span class="p">,</span> <span class="s1">'-gateway'</span><span class="p">,</span> 1356 <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="s1">'-remote'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> 1357 <span class="s1">'-source'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">])</span> 1761 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ectrans'</span><span class="p">,</span> <span class="s1">'-overwrite'</span><span class="p">,</span> <span class="s1">'-gateway'</span><span class="p">,</span> 1762 <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="s1">'-remote'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> 1763 <span class="s1">'-source'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">],</span> 1764 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'TRANSFER TO LOCAL SERVER FAILED!'</span><span class="p">)</span> 1358 1765 1359 1766 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> 1360 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ecp'</span><span class="p">,</span> <span class="s1">'-o'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">,</span> 1361 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">)])</span> 1767 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ecp'</span><span class="p">,</span> <span class="s1">'-o'</span><span class="p">,</span> <span class="n">ofile</span><span class="p">,</span> 1768 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecfsdir</span><span class="p">)],</span> 1769 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'COPY OF FILES TO ECSTORAGE '</span> 1770 <span class="s1">'AREA FAILED!'</span><span class="p">)</span> 1362 1771 1363 1772 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">:</span> 1364 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> 1365 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">),</span> 1366 <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">])</span> 1773 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'mv'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">ofile</span><span class="p">),</span> 1774 <span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">],</span> 1775 <span class="n">error_msg</span><span class="o">=</span><span class="s1">'RELOCATION OF OUTPUT FILES '</span> 1776 <span class="s1">'TO OUTPUTDIR FAILED!'</span><span class="p">)</span> 1367 1777 1368 1778 <span class="k">return</span></div> … … 1374 1784 <span class="sd"> Parameters</span> 1375 1785 <span class="sd"> ----------</span> 1376 <span class="sd"> c : :obj:`ControlFile`</span>1786 <span class="sd"> c : ControlFile</span> 1377 1787 <span class="sd"> Contains all the parameters of CONTROL file and</span> 1378 1788 <span class="sd"> command line.</span> … … 1419 1829 <span class="c1"># read template COMMAND file</span> 1420 1830 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> 1421 <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">))</span> <span class="o">+</span> <span class="s1">'/../Options/COMMAND'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>1831 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> <span class="o">+</span> <span class="s1">'/../Options/COMMAND'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 1422 1832 <span class="n">lflist</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 1423 1833 … … 1444 1854 <span class="c1"># afterwards switch back to the working dir</span> 1445 1855 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">outputdir</span><span class="p">)</span> 1446 <span class="n"> p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span>1447 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart_root_scripts</span><span class="p">))</span>1448 <span class="o">+</span> <span class="s1">'/../FLEXPART_PROGRAM/grib2flexpart'</span><span class="p">,</span> <span class="s1">'useAvailable'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">])</span>1856 <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> <span class="o">+</span> 1857 <span class="s1">'/../FLEXPART_PROGRAM/grib2flexpart'</span><span class="p">,</span> <span class="s1">'useAvailable'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">]</span> 1858 <span class="n">execute_subprocess</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> 1449 1859 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">pwd</span><span class="p">)</span> 1450 1860 … … 1462 1872 <div role="contentinfo"> 1463 1873 <p> 1464 © Copyright 2018, Anne Philipp and Leopold Haimberger .1874 © Copyright 2018, Anne Philipp and Leopold Haimberger 1465 1875 1466 1876 </p> … … 1481 1891 1482 1892 1483 <script type="text/javascript"> 1484 var DOCUMENTATION_OPTIONS = { 1485 URL_ROOT:'../', 1486 VERSION:'7.1 alpha', 1487 LANGUAGE:'None', 1488 COLLAPSE_INDEX:false, 1489 FILE_SUFFIX:'.html', 1490 HAS_SOURCE: true, 1491 SOURCELINK_SUFFIX: '.txt' 1492 }; 1493 </script> 1494 <script type="text/javascript" src="../_static/jquery.js"></script> 1495 <script type="text/javascript" src="../_static/underscore.js"></script> 1496 <script type="text/javascript" src="../_static/doctools.js"></script> 1497 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 1893 1894 1895 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 1896 <script type="text/javascript" src="../_static/jquery.js"></script> 1897 <script type="text/javascript" src="../_static/underscore.js"></script> 1898 <script type="text/javascript" src="../_static/doctools.js"></script> 1899 1498 1900 1499 1901 -
documentation/Sphinx/build/html/_modules/MarsRetrieval.html
r274f9ef r2625ca8 170 170 <span class="c1"># - added documentation</span> 171 171 <span class="c1"># - applied some minor modifications in programming style/structure</span> 172 <span class="c1"># - added writing of mars request attributes to a csv file</span> 172 173 <span class="c1">#</span> 173 174 <span class="c1"># @License:</span> 174 <span class="c1"># (C) Copyright 2015-2018.</span> 175 <span class="c1"># (C) Copyright 2014-2019.</span> 176 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 175 177 <span class="c1">#</span> 176 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 177 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 178 <span class="c1">#</span> 179 <span class="c1"># @Class Description:</span> 180 <span class="c1"># A MARS revtrieval has a specific syntax with a selection of keywords and</span> 181 <span class="c1"># their corresponding values. This class provides the necessary functions</span> 182 <span class="c1"># by displaying the selected parameters and their values and the actual</span> 183 <span class="c1"># retrievement of the data through a mars request or a Python web api</span> 184 <span class="c1"># interface. The initialization already expects all the keyword values.</span> 185 <span class="c1">#</span> 186 <span class="c1"># @Class Content:</span> 187 <span class="c1"># - __init__</span> 188 <span class="c1"># - display_info</span> 189 <span class="c1"># - data_retrieve</span> 190 <span class="c1">#</span> 191 <span class="c1"># @Class Attributes:</span> 192 <span class="c1"># - server</span> 193 <span class="c1"># - marsclass</span> 194 <span class="c1"># - dtype</span> 195 <span class="c1"># - levtype</span> 196 <span class="c1"># - levelist</span> 197 <span class="c1"># - repres</span> 198 <span class="c1"># - date</span> 199 <span class="c1"># - resol</span> 200 <span class="c1"># - stream</span> 201 <span class="c1"># - area</span> 202 <span class="c1"># - time</span> 203 <span class="c1"># - step</span> 204 <span class="c1"># - expver</span> 205 <span class="c1"># - number</span> 206 <span class="c1"># - accuracy</span> 207 <span class="c1"># - grid</span> 208 <span class="c1"># - gaussian</span> 209 <span class="c1"># - target</span> 210 <span class="c1"># - param</span> 211 <span class="c1">#</span> 178 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 179 <span class="c1"># International License. To view a copy of this license, visit</span> 180 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 181 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 212 182 <span class="c1">#*******************************************************************************</span> 213 183 … … 226 196 <span class="c1"># ------------------------------------------------------------------------------</span> 227 197 <div class="viewcode-block" id="MarsRetrieval"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval">[docs]</a><span class="k">class</span> <span class="nc">MarsRetrieval</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 228 <span class="sd">'''Class for submitting MARS retrievals.</span> 198 <span class="sd">'''Specific syntax and content for submission of MARS retrievals.</span> 199 200 <span class="sd"> A MARS revtrieval has a specific syntax with a selection of keywords and</span> 201 <span class="sd"> their corresponding values. This class provides the necessary functions</span> 202 <span class="sd"> by displaying the selected parameters and their values and the actual</span> 203 <span class="sd"> retrievement of the data through a mars request or a Python web api</span> 204 <span class="sd"> interface. The initialization already expects all the keyword values.</span> 229 205 230 206 <span class="sd"> A description of MARS keywords/arguments and examples of their</span> … … 232 208 <span class="sd"> https://software.ecmwf.int/wiki/display/UDOC/\</span> 233 209 <span class="sd"> Identification+keywords#Identificationkeywords-class</span> 210 211 <span class="sd"> Attributes</span> 212 <span class="sd"> ----------</span> 213 <span class="sd"> server : ECMWFService or ECMWFDataServer</span> 214 <span class="sd"> This is the connection to the ECMWF data servers.</span> 215 216 <span class="sd"> public : int</span> 217 <span class="sd"> Decides which Web API Server version is used.</span> 218 219 <span class="sd"> marsclass : str, optional</span> 220 <span class="sd"> Characterisation of dataset.</span> 221 222 <span class="sd"> dataset : str, optional</span> 223 <span class="sd"> For public datasets there is the specific naming and parameter</span> 224 <span class="sd"> dataset which has to be used to characterize the type of</span> 225 <span class="sd"> data.</span> 226 227 <span class="sd"> type : str, optional</span> 228 <span class="sd"> Determines the type of fields to be retrieved.</span> 229 230 <span class="sd"> levtype : str, optional</span> 231 <span class="sd"> Denotes type of level.</span> 232 233 <span class="sd"> levelist : str, optional</span> 234 <span class="sd"> Specifies the required levels.</span> 235 236 <span class="sd"> repres : str, optional</span> 237 <span class="sd"> Selects the representation of the archived data.</span> 238 239 <span class="sd"> date : str, optional</span> 240 <span class="sd"> Specifies the Analysis date, the Forecast base date or</span> 241 <span class="sd"> Observations date.</span> 242 243 <span class="sd"> resol : str, optional</span> 244 <span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> 245 <span class="sd"> before carrying out any other selected post-processing.</span> 246 247 <span class="sd"> stream : str, optional</span> 248 <span class="sd"> Identifies the forecasting system used to generate the data.</span> 249 250 <span class="sd"> area : str, optional</span> 251 <span class="sd"> Specifies the desired sub-area of data to be extracted.</span> 252 253 <span class="sd"> time : str, optional</span> 254 <span class="sd"> Specifies the time of the data in hours and minutes.</span> 255 256 <span class="sd"> step : str, optional</span> 257 <span class="sd"> Specifies the forecast time step from forecast base time.</span> 258 259 <span class="sd"> expver : str, optional</span> 260 <span class="sd"> The version of the dataset.</span> 261 262 <span class="sd"> number : str, optional</span> 263 <span class="sd"> Selects the member in ensemble forecast run.</span> 264 265 <span class="sd"> accuracy : str, optional</span> 266 <span class="sd"> Specifies the number of bits per value to be used in the</span> 267 <span class="sd"> generated GRIB coded fields.</span> 268 269 <span class="sd"> grid : str, optional</span> 270 <span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> 271 <span class="sd"> or a Latitude/Longitude grid.</span> 272 273 <span class="sd"> gaussian : str, optional</span> 274 <span class="sd"> This parameter is deprecated and should no longer be used.</span> 275 <span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> 276 277 <span class="sd"> target : str, optional</span> 278 <span class="sd"> Specifies a file into which data is to be written after</span> 279 <span class="sd"> retrieval or manipulation.</span> 280 281 <span class="sd"> param : str, optional</span> 282 <span class="sd"> Specifies the meteorological parameter.</span> 234 283 <span class="sd"> '''</span> 235 284 … … 249 298 <span class="sd"> Parameters</span> 250 299 <span class="sd"> ----------</span> 251 <span class="sd"> server : :obj:`ECMWFService`</span>300 <span class="sd"> server : ECMWFService or ECMWFDataServer</span> 252 301 <span class="sd"> This is the connection to the ECMWF data servers.</span> 253 302 <span class="sd"> It is needed for the pythonic access of ECMWF data.</span> 254 303 255 <span class="sd"> public : :obj:`integer`</span>304 <span class="sd"> public : int</span> 256 305 <span class="sd"> Decides which Web API version is used:</span> 257 306 <span class="sd"> 0: member-state users and full archive access</span> … … 260 309 <span class="sd"> Default is "0" and for member-state users.</span> 261 310 262 <span class="sd"> marsclass : :obj:`string`, optional</span>311 <span class="sd"> marsclass : str, optional</span> 263 312 <span class="sd"> Characterisation of dataset. E.g. EI (ERA-Interim),</span> 264 313 <span class="sd"> E4 (ERA40), OD (Operational archive), ea (ERA5).</span> 265 314 <span class="sd"> Default is the ERA-Interim dataset "ei".</span> 266 315 267 <span class="sd"> dataset : :obj:`string`, optional</span>316 <span class="sd"> dataset : str, optional</span> 268 317 <span class="sd"> For public datasets there is the specific naming and parameter</span> 269 318 <span class="sd"> dataset which has to be used to characterize the type of</span> … … 272 321 <span class="sd"> Default is an empty string.</span> 273 322 274 <span class="sd"> type : :obj:`string`, optional</span>323 <span class="sd"> type : str, optional</span> 275 324 <span class="sd"> Determines the type of fields to be retrieved.</span> 276 325 <span class="sd"> Selects between observations, images or fields.</span> … … 279 328 <span class="sd"> Default is an empty string.</span> 280 329 281 <span class="sd"> levtype : :obj:`string`, optional</span>330 <span class="sd"> levtype : str, optional</span> 282 331 <span class="sd"> Denotes type of level. Has a direct implication on valid</span> 283 332 <span class="sd"> levelist values!</span> … … 287 336 <span class="sd"> Default is an empty string.</span> 288 337 289 <span class="sd"> levelist : :obj:`string`, optional</span>338 <span class="sd"> levelist : str, optional</span> 290 339 <span class="sd"> Specifies the required levels. It has to have a valid</span> 291 340 <span class="sd"> correspondence to the selected levtype.</span> … … 293 342 <span class="sd"> Default is an empty string.</span> 294 343 295 <span class="sd"> repres : :obj:`string`, optional</span>344 <span class="sd"> repres : str, optional</span> 296 345 <span class="sd"> Selects the representation of the archived data.</span> 297 346 <span class="sd"> E.g. sh - spherical harmonics, gg - Gaussian grid,</span> … … 299 348 <span class="sd"> Default is an empty string.</span> 300 349 301 <span class="sd"> date : :obj:`string`, optional</span>350 <span class="sd"> date : str, optional</span> 302 351 <span class="sd"> Specifies the Analysis date, the Forecast base date or</span> 303 352 <span class="sd"> Observations date. Valid formats are:</span> … … 305 354 <span class="sd"> Default is an empty string.</span> 306 355 307 <span class="sd"> resol : :obj:`string`, optional</span>356 <span class="sd"> resol : str, optional</span> 308 357 <span class="sd"> Specifies the desired triangular truncation of retrieved data,</span> 309 358 <span class="sd"> before carrying out any other selected post-processing.</span> … … 322 371 <span class="sd"> Default is an empty string.</span> 323 372 324 <span class="sd"> stream : :obj:`string`, optional</span>373 <span class="sd"> stream : str, optional</span> 325 374 <span class="sd"> Identifies the forecasting system used to generate the data.</span> 326 375 <span class="sd"> E.g. oper (Atmospheric model), enfo (Ensemble forecats), ...</span> 327 376 <span class="sd"> Default is an empty string.</span> 328 377 329 <span class="sd"> area : :obj:`string`, optional</span>378 <span class="sd"> area : str, optional</span> 330 379 <span class="sd"> Specifies the desired sub-area of data to be extracted.</span> 331 380 <span class="sd"> Areas can be defined to wrap around the globe.</span> … … 345 394 <span class="sd"> Default is an empty string.</span> 346 395 347 <span class="sd"> time : :obj:`string`, optional</span>396 <span class="sd"> time : str, optional</span> 348 397 <span class="sd"> Specifies the time of the data in hours and minutes.</span> 349 398 <span class="sd"> Valid values depend on the type of data: Analysis time,</span> … … 355 404 <span class="sd"> Default is an empty string.</span> 356 405 357 <span class="sd"> step : :obj:`string`, optional</span>406 <span class="sd"> step : str, optional</span> 358 407 <span class="sd"> Specifies the forecast time step from forecast base time.</span> 359 408 <span class="sd"> Valid values are hours (HH) from forecast base time. It also</span> … … 363 412 <span class="sd"> Default is an empty string.</span> 364 413 365 <span class="sd"> expver : :obj:`string`, optional</span>414 <span class="sd"> expver : str, optional</span> 366 415 <span class="sd"> The version of the dataset. Each experiment is assigned a</span> 367 416 <span class="sd"> unique code (version). Production data is assigned 1 or 2,</span> … … 371 420 <span class="sd"> Default is "1".</span> 372 421 373 <span class="sd"> number : :obj:`string`, optional</span>422 <span class="sd"> number : str, optional</span> 374 423 <span class="sd"> Selects the member in ensemble forecast run. (Only then it</span> 375 424 <span class="sd"> is necessary.) It has a different meaning depending on</span> … … 378 427 <span class="sd"> Default is an empty string.</span> 379 428 380 <span class="sd"> accuracy : :obj:`string`, optional</span>429 <span class="sd"> accuracy : str, optional</span> 381 430 <span class="sd"> Specifies the number of bits per value to be used in the</span> 382 431 <span class="sd"> generated GRIB coded fields.</span> … … 389 438 <span class="sd"> Default is an empty string.</span> 390 439 391 <span class="sd"> grid : :obj:`string`, optional</span>440 <span class="sd"> grid : str, optional</span> 392 441 <span class="sd"> Specifies the output grid which can be either a Gaussian grid</span> 393 442 <span class="sd"> or a Latitude/Longitude grid. MARS requests specifying</span> … … 410 459 <span class="sd"> Default is an empty string.</span> 411 460 412 <span class="sd"> gaussian : :obj:`string`, optional</span>461 <span class="sd"> gaussian : str, optional</span> 413 462 <span class="sd"> This parameter is deprecated and should no longer be used.</span> 414 463 <span class="sd"> Specifies the desired type of Gaussian grid for the output.</span> … … 418 467 <span class="sd"> Default is an empty string.</span> 419 468 420 <span class="sd"> target : :obj:`string`, optional</span>469 <span class="sd"> target : str, optional</span> 421 470 <span class="sd"> Specifies a file into which data is to be written after</span> 422 471 <span class="sd"> retrieval or manipulation. Path names should always be</span> … … 432 481 <span class="sd"> Default is an empty string.</span> 433 482 434 <span class="sd"> param : :obj:`string`, optional</span>483 <span class="sd"> param : str, optional</span> 435 484 <span class="sd"> Specifies the meteorological parameter.</span> 436 485 <span class="sd"> The list of meteorological parameters in MARS is extensive.</span> … … 500 549 501 550 502 <div class="viewcode-block" id="MarsRetrieval.print_info"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval.print_info">[docs]</a> <span class="k">def</span> <span class="nf">print_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> 503 <span class="sd">'''Prints all mars requests to an extra file for debugging and</span> 504 <span class="sd"> information.</span> 551 <div class="viewcode-block" id="MarsRetrieval.print_infodata_csv"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval.print_infodata_csv">[docs]</a> <span class="k">def</span> <span class="nf">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> 552 <span class="sd">'''Write all request parameter in alpabetical order into a "csv" file.</span> 505 553 506 554 <span class="sd"> Parameters</span> 507 555 <span class="sd"> ----------</span> 508 <span class="sd"> inputdir : :obj:`string`</span>556 <span class="sd"> inputdir : str</span> 509 557 <span class="sd"> The path where all data from the retrievals are stored.</span> 510 558 511 <span class="sd"> request_number : :obj:`integer`</span> 512 <span class="sd"> Number of mars requests for flux and non-flux data.</span> 513 514 <span class="sd"> Return</span> 515 <span class="sd"> ------</span> 516 517 <span class="sd"> '''</span> 518 <span class="c1"># Get all class attributes and their values as a dictionary</span> 519 <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> 520 521 <span class="c1"># open a file to store all requests to</span> 522 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> 523 <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 524 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'mars_request #'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">request_number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 525 <span class="c1"># iterate through all attributes and print them</span> 526 <span class="c1"># with their corresponding values</span> 527 <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> 528 <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'server'</span><span class="p">,</span> <span class="s1">'public'</span><span class="p">]:</span> 529 <span class="k">pass</span> 530 <span class="k">else</span><span class="p">:</span> 531 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">': '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 532 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)</span> 533 534 <span class="k">return</span></div> 535 536 537 <div class="viewcode-block" id="MarsRetrieval.print_infodata_csv"><a class="viewcode-back" href="../api.html#MarsRetrieval.MarsRetrieval.print_infodata_csv">[docs]</a> <span class="k">def</span> <span class="nf">print_infodata_csv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">,</span> <span class="n">request_number</span><span class="p">):</span> 538 <span class="sd">'''Write all request parameter in alpabetical order into a "csv" file.</span> 539 540 <span class="sd"> Parameters</span> 541 <span class="sd"> ----------</span> 542 <span class="sd"> inputdir : :obj:`string`</span> 543 <span class="sd"> The path where all data from the retrievals are stored.</span> 544 545 <span class="sd"> request_number : :obj:`integer`</span> 559 <span class="sd"> request_number : int</span> 546 560 <span class="sd"> Number of mars requests for flux and non-flux data.</span> 547 561 … … 668 682 <div role="contentinfo"> 669 683 <p> 670 © Copyright 2018, Anne Philipp and Leopold Haimberger .684 © Copyright 2018, Anne Philipp and Leopold Haimberger 671 685 672 686 </p> … … 687 701 688 702 689 <script type="text/javascript"> 690 var DOCUMENTATION_OPTIONS = { 691 URL_ROOT:'../', 692 VERSION:'7.1 alpha', 693 LANGUAGE:'None', 694 COLLAPSE_INDEX:false, 695 FILE_SUFFIX:'.html', 696 HAS_SOURCE: true, 697 SOURCELINK_SUFFIX: '.txt' 698 }; 699 </script> 700 <script type="text/javascript" src="../_static/jquery.js"></script> 701 <script type="text/javascript" src="../_static/underscore.js"></script> 702 <script type="text/javascript" src="../_static/doctools.js"></script> 703 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 703 704 705 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 706 <script type="text/javascript" src="../_static/jquery.js"></script> 707 <script type="text/javascript" src="../_static/underscore.js"></script> 708 <script type="text/javascript" src="../_static/doctools.js"></script> 709 704 710 705 711 -
documentation/Sphinx/build/html/_modules/UioFiles.html
r274f9ef r2625ca8 165 165 <span class="c1"># - added pattern search in method list_files</span> 166 166 <span class="c1">#</span> 167 <span class="c1"># February 2018 - Anne Philipp (University of Vienna):</span>167 <span class="c1"># February - December 2018 - Anne Philipp (University of Vienna):</span> 168 168 <span class="c1"># - applied PEP8 style guide</span> 169 169 <span class="c1"># - added documentation</span> … … 173 173 <span class="c1"># - modified the class so that it is initiated with a pattern instead</span> 174 174 <span class="c1"># of suffixes. Gives more precision in selection of files.</span> 175 <span class="c1"># - added delete method</span> 175 176 <span class="c1">#</span> 176 177 <span class="c1"># @License:</span> 177 <span class="c1"># (C) Copyright 2014-2018.</span> 178 <span class="c1">#</span> 179 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 180 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 181 <span class="c1">#</span> 182 <span class="c1"># @Class Decription:</span> 183 <span class="c1"># The class is for file manipulation. It is initiated with a regular</span> 184 <span class="c1"># expression pattern for this instance and can produce a list of Files</span> 185 <span class="c1"># from the given file pattern. These files can be deleted.</span> 186 <span class="c1">#</span> 187 <span class="c1"># @Class Content:</span> 188 <span class="c1"># - __init__</span> 189 <span class="c1"># - __str__</span> 190 <span class="c1"># - __list_files__</span> 191 <span class="c1"># - delete_files</span> 192 <span class="c1">#</span> 193 <span class="c1"># @Class Attributes:</span> 194 <span class="c1"># - pattern</span> 195 <span class="c1"># - files</span> 196 <span class="c1">#</span> 178 <span class="c1"># (C) Copyright 2014-2019.</span> 179 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 180 <span class="c1">#</span> 181 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 182 <span class="c1"># International License. To view a copy of this license, visit</span> 183 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 184 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 197 185 <span class="c1">#*******************************************************************************</span> 198 186 … … 204 192 <span class="kn">import</span> <span class="nn">fnmatch</span> 205 193 206 <span class="c1"># software specific module from flex_extract</span>194 <span class="c1"># software specific modules from flex_extract</span> 207 195 <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> 208 <span class="c1">#import profiling</span>209 196 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">get_list_as_string</span> 210 197 … … 214 201 215 202 <div class="viewcode-block" id="UioFiles"><a class="viewcode-back" href="../api.html#UioFiles.UioFiles">[docs]</a><span class="k">class</span> <span class="nc">UioFiles</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 216 <span class="sd">'''Class to manipulate files. At initialisation it has the pattern</span> 217 <span class="sd"> which stores a regular expression pattern for the files, the path</span> 218 <span class="sd"> to the files and the files already.</span> 203 <span class="sd">'''Collection of files matching a specific pattern.</span> 204 205 <span class="sd"> The pattern can contain regular expressions for the files.</span> 206 <span class="sd"> The files are listed and can be transformed to a single string or</span> 207 <span class="sd"> they can be deleted.</span> 208 209 <span class="sd"> Attributes</span> 210 <span class="sd"> ----------</span> 211 <span class="sd"> path : str</span> 212 <span class="sd"> Directory where to list the files.</span> 213 214 <span class="sd"> pattern : str</span> 215 <span class="sd"> Regular expression pattern. For example: '\*.grb'</span> 216 217 <span class="sd"> files : list of str</span> 218 <span class="sd"> List of files matching the pattern in the path.</span> 219 219 <span class="sd"> '''</span> 220 220 <span class="c1"># --------------------------------------------------------------------------</span> 221 <span class="c1"># CLASS FUNCTIONS</span>221 <span class="c1"># CLASS METHODS</span> 222 222 <span class="c1"># --------------------------------------------------------------------------</span> 223 223 <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> … … 226 226 <span class="sd"> Parameters</span> 227 227 <span class="sd"> ----------</span> 228 <span class="sd"> path : :obj:`string`</span>228 <span class="sd"> path : str</span> 229 229 <span class="sd"> Directory where to list the files.</span> 230 230 231 <span class="sd"> pattern : :obj:`string`</span>231 <span class="sd"> pattern : str</span> 232 232 <span class="sd"> Regular expression pattern. For example: '\*.grb'</span> 233 233 … … 241 241 <span class="bp">self</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="p">[]</span> 242 242 243 <span class="bp">self</span><span class="o">.</span><span class="n">_ _list_files__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>243 <span class="bp">self</span><span class="o">.</span><span class="n">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> 244 244 245 245 <span class="k">return</span> 246 246 247 <span class="c1">#@profiling.timefn</span> 248 <span class="k">def</span> <span class="nf">_ _list_files__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>247 248 <span class="k">def</span> <span class="nf">_list_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span> 249 249 <span class="sd">'''Lists all files in the directory with the matching</span> 250 250 <span class="sd"> regular expression pattern.</span> … … 252 252 <span class="sd"> Parameters</span> 253 253 <span class="sd"> ----------</span> 254 <span class="sd"> path : :obj:`string`</span>254 <span class="sd"> path : str</span> 255 255 <span class="sd"> Path to the files.</span> 256 256 … … 269 269 <span class="k">return</span> 270 270 271 271 272 <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> 272 273 <span class="sd">'''Converts the list of files into a single string.</span> … … 278 279 <span class="sd"> Return</span> 279 280 <span class="sd"> ------</span> 280 <span class="sd"> files_string : :obj:`string`</span>281 <span class="sd"> files_string : str</span> 281 282 <span class="sd"> The content of the list as a single string.</span> 282 283 <span class="sd"> '''</span> … … 286 287 287 288 <span class="k">return</span> <span class="n">files_string</span> 289 288 290 289 291 <div class="viewcode-block" id="UioFiles.delete_files"><a class="viewcode-back" href="../api.html#UioFiles.UioFiles.delete_files">[docs]</a> <span class="k">def</span> <span class="nf">delete_files</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> … … 314 316 <div role="contentinfo"> 315 317 <p> 316 © Copyright 2018, Anne Philipp and Leopold Haimberger .318 © Copyright 2018, Anne Philipp and Leopold Haimberger 317 319 318 320 </p> … … 333 335 334 336 335 <script type="text/javascript"> 336 var DOCUMENTATION_OPTIONS = { 337 URL_ROOT:'../', 338 VERSION:'7.1 alpha', 339 LANGUAGE:'None', 340 COLLAPSE_INDEX:false, 341 FILE_SUFFIX:'.html', 342 HAS_SOURCE: true, 343 SOURCELINK_SUFFIX: '.txt' 344 }; 345 </script> 346 <script type="text/javascript" src="../_static/jquery.js"></script> 347 <script type="text/javascript" src="../_static/underscore.js"></script> 348 <script type="text/javascript" src="../_static/doctools.js"></script> 349 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 337 338 339 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 340 <script type="text/javascript" src="../_static/jquery.js"></script> 341 <script type="text/javascript" src="../_static/underscore.js"></script> 342 <script type="text/javascript" src="../_static/doctools.js"></script> 343 350 344 351 345 -
documentation/Sphinx/build/html/_modules/disaggregation.html
r708c667 r2625ca8 170 170 <span class="c1"># - outsourced the disaggregation functions dapoly and darain</span> 171 171 <span class="c1"># to a new module named disaggregation</span> 172 <span class="c1"># - added the new disaggregation method for precipitation</span> 172 173 <span class="c1">#</span> 173 174 <span class="c1"># @License:</span> 174 <span class="c1"># (C) Copyright 2015-2018.</span> 175 <span class="c1"># (C) Copyright 2014-2019.</span> 176 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 175 177 <span class="c1">#</span> 176 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 177 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 178 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 179 <span class="c1"># International License. To view a copy of this license, visit</span> 180 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 181 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 178 182 <span class="c1">#</span> 179 <span class="c1"># @Module Description:</span> 180 <span class="c1"># disaggregation of deaccumulated flux data from an ECMWF model FG field.</span> 181 <span class="c1"># Initially the flux data to be concerned are:</span> 182 <span class="c1"># - large-scale precipitation</span> 183 <span class="c1"># - convective precipitation</span> 184 <span class="c1"># - surface sensible heat flux</span> 185 <span class="c1"># - surface solar radiation</span> 186 <span class="c1"># - u stress</span> 187 <span class="c1"># - v stress</span> 188 <span class="c1"># Different versions of disaggregation is provided for rainfall</span> 189 <span class="c1"># data (darain, modified linear) and the surface fluxes and</span> 190 <span class="c1"># stress data (dapoly, cubic polynomial).</span> 191 <span class="c1">#</span> 192 <span class="c1"># @Module Content:</span> 183 <span class="c1"># @Methods:</span> 193 184 <span class="c1"># - dapoly</span> 194 185 <span class="c1"># - darain</span> 195 186 <span class="c1"># - IA3</span> 196 <span class="c1">#</span>197 187 <span class="c1">#*******************************************************************************</span> 188 <span class="sd">'''Disaggregation of deaccumulated flux data from an ECMWF model FG field.</span> 189 190 <span class="sd">Initially the flux data to be concerned are:</span> 191 <span class="sd"> - large-scale precipitation</span> 192 <span class="sd"> - convective precipitation</span> 193 <span class="sd"> - surface sensible heat flux</span> 194 <span class="sd"> - surface solar radiation</span> 195 <span class="sd"> - u stress</span> 196 <span class="sd"> - v stress</span> 197 198 <span class="sd">Different versions of disaggregation is provided for rainfall</span> 199 <span class="sd">data (darain, modified linear) and the surface fluxes and</span> 200 <span class="sd">stress data (dapoly, cubic polynomial).</span> 201 <span class="sd">'''</span> 198 202 199 203 <span class="c1"># ------------------------------------------------------------------------------</span> … … 218 222 <span class="sd"> Parameters</span> 219 223 <span class="sd"> ----------</span> 220 <span class="sd"> alist : :obj:`list` of :obj:`array` of :obj:`float`</span>224 <span class="sd"> alist : list of array of float</span> 221 225 <span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> 222 226 <span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> … … 224 228 <span class="sd"> Return</span> 225 229 <span class="sd"> ------</span> 226 <span class="sd"> nfield : :obj:`array` of :obj:`float`</span>230 <span class="sd"> nfield : array of float</span> 227 231 <span class="sd"> Interpolated flux at central point of accumulation timespan.</span> 228 232 … … 262 266 <span class="sd"> Parameters</span> 263 267 <span class="sd"> ----------</span> 264 <span class="sd"> alist : :obj:`list` of :obj:`array` of :obj:`float`</span>268 <span class="sd"> alist : list of array of float</span> 265 269 <span class="sd"> List of 4 timespans as 2-dimensional, horizontal fields.</span> 266 270 <span class="sd"> E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</span> … … 268 272 <span class="sd"> Return</span> 269 273 <span class="sd"> ------</span> 270 <span class="sd"> nfield : :obj:`array` of :obj:`float`</span>274 <span class="sd"> nfield : array of float</span> 271 275 <span class="sd"> Interpolated flux at central point of accumulation timespan.</span> 272 276 … … 313 317 <span class="sd"> Note</span> 314 318 <span class="sd"> ----</span> 315 <span class="sd"> Copyright 2017</span>319 <span class="sd"> (C) Copyright 2017-2019</span> 316 320 <span class="sd"> Sabine Hittmeir, Anne Philipp, Petra Seibert</span> 317 321 … … 323 327 <span class="sd"> Parameters</span> 324 328 <span class="sd"> ----------</span> 325 <span class="sd"> g : :obj:`list` of :obj:`float`</span>329 <span class="sd"> g : list of float</span> 326 330 <span class="sd"> Complete data series that will be interpolated having</span> 327 331 <span class="sd"> the dimension of the original raw series.</span> … … 329 333 <span class="sd"> Return</span> 330 334 <span class="sd"> ------</span> 331 <span class="sd"> f : :obj:`list` of :obj:`float`</span>335 <span class="sd"> f : list of float</span> 332 336 <span class="sd"> The interpolated data series with additional subgrid points.</span> 333 337 <span class="sd"> Its dimension is equal to the length of the input data series</span> … … 363 367 364 368 <span class="c1"># time step</span> 365 <span class="n">dt</span> <span class="o">=</span><span class="mf">1.0</span>369 <span class="n">dt</span> <span class="o">=</span> <span class="mf">1.0</span> 366 370 367 371 <span class="c1">############### Non-negative Geometric Mean Based Algorithm ###############</span> … … 370 374 <span class="c1"># the value at t=0 of the interpolation algorithm coincides with the</span> 371 375 <span class="c1"># first data value according to the persistence hypothesis</span> 372 <span class="n">f</span> <span class="o">=</span><span class="p">[</span><span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>376 <span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">g</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> 373 377 374 378 <span class="c1"># compute two first sub-grid intervals without monotonicity check</span> … … 376 380 <span class="c1"># points and interpolate the corresponding data values</span> 377 381 <span class="c1"># except for the last interval due to boundary conditions</span> 378 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>382 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> 379 383 380 384 <span class="c1"># as a requirement:</span> … … 382 386 <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> 383 387 <span class="c1"># according to Eq. (6)</span> 384 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span><span class="mf">0.</span><span class="p">:</span>385 <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span>388 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> 389 <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">])</span> 386 390 387 391 <span class="c1"># otherwise the sub-grid values are calculated and added to the list</span> … … 398 402 <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> 399 403 <span class="c1"># according to the equal area condition with Eq. (19)</span> 400 <span class="n">fi1</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span>404 <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> 401 405 402 406 <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> 403 407 <span class="c1"># according Eq. (18)</span> 404 <span class="n">fi2</span> <span class="o">=</span><span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span>408 <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> 405 409 406 410 <span class="c1"># add next interval of interpolated (sub-)grid values</span> … … 413 417 <span class="c1"># points and interpolate the corresponding data values</span> 414 418 <span class="c1"># except for the last interval due to boundary conditions</span> 415 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>419 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> 416 420 417 421 <span class="c1"># as a requirement:</span> … … 419 423 <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> 420 424 <span class="c1"># according to Eq. (6)</span> 421 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span><span class="mf">0.</span><span class="p">:</span>425 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> 422 426 <span class="c1"># apply monotonicity filter for interval before</span> 423 427 <span class="c1"># check if there is "M" or "W" shape</span> 424 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \425 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \426 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span><span class="p">:</span>428 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 429 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 430 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> 427 431 428 432 <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> … … 436 440 <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> 437 441 <span class="c1"># see Eq. (18) and (19)</span> 438 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span><span class="n">fmon</span>439 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span>440 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span>441 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span>442 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span>442 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> 443 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> 444 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> 445 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> 446 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> 443 447 444 448 <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span> … … 453 457 <span class="c1"># geometric mean, restricted such that non-negativity is guaranteed</span> 454 458 <span class="c1"># according to Eq. (25)</span> 455 <span class="n">fip1</span> <span class="o">=</span><span class="nb">min</span><span class="p">(</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">,</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span>459 <span class="n">fip1</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">,</span> <span class="mf">3.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span> 456 460 457 461 <span class="c1"># the function value at the first sub-grid point (fi1) is determined</span> 458 462 <span class="c1"># according to the equal area condition with Eq. (19)</span> 459 <span class="n">fi1</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span>463 <span class="n">fi1</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fip1</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fi</span> 460 464 461 465 <span class="c1"># the function value at the second sub-grid point (fi2) is determined</span> 462 466 <span class="c1"># according Eq. (18)</span> 463 <span class="n">fi2</span> <span class="o">=</span><span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span>467 <span class="n">fi2</span> <span class="o">=</span> <span class="n">fi1</span><span class="o">+</span><span class="mf">1.</span><span class="o">/</span><span class="mf">3.</span><span class="o">*</span><span class="p">(</span><span class="n">fip1</span><span class="o">-</span><span class="n">fi</span><span class="p">)</span> 464 468 465 469 <span class="c1"># apply monotonicity filter for interval before</span> 466 470 <span class="c1"># check if there is "M" or "W" shape</span> 467 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \468 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \469 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span><span class="p">:</span>471 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 472 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 473 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> 470 474 471 475 <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> … … 479 483 <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> 480 484 <span class="c1"># see Eq. (18) and (19)</span> 481 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span><span class="n">fmon</span>482 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span>483 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span>484 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span>485 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span>485 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> 486 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> 487 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> 488 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> 489 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> 486 490 487 491 <span class="c1"># add next interval of interpolated (sub-)grid values</span> … … 496 500 <span class="c1"># interval in f has to be zero to such that f[i+1]=f[i+2]=f[i+3]=0</span> 497 501 <span class="c1"># according to Eq. (6)</span> 498 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span><span class="mf">0.</span><span class="p">:</span>502 <span class="k">if</span> <span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> 499 503 <span class="c1"># apply monotonicity filter for interval before</span> 500 504 <span class="c1"># check if there is "M" or "W" shape</span> 501 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \502 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \503 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span><span class="p">:</span>505 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 506 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 507 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> 504 508 505 509 <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> … … 513 517 <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> 514 518 <span class="c1"># see Eq. (18) and (19)</span> 515 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span><span class="n">fmon</span>516 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span>517 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span>518 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span>519 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span>519 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> 520 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> 521 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> 522 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> 523 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> 520 524 521 525 <span class="n">f</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">,</span><span class="mf">0.</span><span class="p">])</span> … … 538 542 <span class="c1"># apply monotonicity filter for interval before</span> 539 543 <span class="c1"># check if there is "M" or "W" shape</span> 540 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \541 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span> \542 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==-</span><span class="mi">1</span><span class="p">:</span>544 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 545 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> \ 546 <span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> 543 547 544 548 <span class="c1"># the monotonicity filter corrects the value at (fim1) by</span> … … 552 556 <span class="c1"># interval boundaries (fi) and (fip2) remains unchanged</span> 553 557 <span class="c1"># see Eq. (18) and (19)</span> 554 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span><span class="n">fmon</span>555 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span>556 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span>557 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span><span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span>558 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span>558 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">fmon</span> 559 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span> 560 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">6</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">fmon</span><span class="o">-</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">7</span><span class="p">])</span><span class="o">/</span><span class="mf">3.</span> 561 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mf">3.</span><span class="o">/</span><span class="mf">2.</span><span class="o">*</span><span class="n">g</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="mf">5.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mf">1.</span><span class="o">/</span><span class="mf">12.</span><span class="o">*</span><span class="n">fmon</span> 562 <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">fmon</span><span class="p">)</span><span class="o">/</span><span class="mf">3.</span> 559 563 560 564 <span class="c1"># add next interval of interpolated (sub-)grid values</span> … … 576 580 <div role="contentinfo"> 577 581 <p> 578 © Copyright 2018, Anne Philipp and Leopold Haimberger .582 © Copyright 2018, Anne Philipp and Leopold Haimberger 579 583 580 584 </p> … … 595 599 596 600 597 <script type="text/javascript"> 598 var DOCUMENTATION_OPTIONS = { 599 URL_ROOT:'../', 600 VERSION:'7.1 alpha', 601 LANGUAGE:'None', 602 COLLAPSE_INDEX:false, 603 FILE_SUFFIX:'.html', 604 HAS_SOURCE: true, 605 SOURCELINK_SUFFIX: '.txt' 606 }; 607 </script> 608 <script type="text/javascript" src="../_static/jquery.js"></script> 609 <script type="text/javascript" src="../_static/underscore.js"></script> 610 <script type="text/javascript" src="../_static/doctools.js"></script> 611 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 601 602 603 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 604 <script type="text/javascript" src="../_static/jquery.js"></script> 605 <script type="text/javascript" src="../_static/underscore.js"></script> 606 <script type="text/javascript" src="../_static/doctools.js"></script> 607 612 608 613 609 -
documentation/Sphinx/build/html/_modules/get_mars_data.html
r274f9ef r2625ca8 175 175 <span class="c1"># online documentation)</span> 176 176 <span class="c1"># - use of UIFiles class for file selection and deletion</span> 177 <span class="c1">#</span> 177 <span class="c1"># - seperated get_mars_data function into several smaller pieces:</span> 178 <span class="c1"># write_reqheader, mk_server, mk_dates, remove_old, do_retrievment</span> 178 179 <span class="c1">#</span> 179 180 <span class="c1"># @License:</span> 180 <span class="c1"># (C) Copyright 2014-2018.</span> 181 <span class="c1"># (C) Copyright 2014-2019.</span> 182 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 181 183 <span class="c1">#</span> 182 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 183 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 184 <span class="c1">#</span> 185 <span class="c1"># @Program Functionality:</span> 186 <span class="c1"># This program can be used as a module in the whole flex_extract process</span> 187 <span class="c1"># or can be run by itself to just extract MARS data from ECMWF. To do so,</span> 188 <span class="c1"># a couple of necessary parameters has to be passed with the program call.</span> 189 <span class="c1"># See documentation for more details.</span> 190 <span class="c1">#</span> 191 <span class="c1"># @Program Content:</span> 192 <span class="c1"># - main</span> 193 <span class="c1"># - get_mars_data</span> 194 <span class="c1"># - do_retrievement</span> 195 <span class="c1">#</span> 184 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 185 <span class="c1"># International License. To view a copy of this license, visit</span> 186 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 187 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 196 188 <span class="c1">#*******************************************************************************</span> 197 189 <span class="sd">'''This script extracts MARS data from ECMWF servers.</span> 190 191 <span class="sd">At first, the necessary parameters from command line and CONTROL files are</span> 192 <span class="sd">extracted. They define the data set to be extracted from MARS.</span> 193 194 <span class="sd">This file can also be imported as a module and contains the following</span> 195 <span class="sd">functions:</span> 196 197 <span class="sd"> * main - the main function of the script</span> 198 <span class="sd"> * get_mars_data - overall control of ECMWF data retrievment</span> 199 <span class="sd"> * write_reqheader - writes the header into the mars_request file</span> 200 <span class="sd"> * mk_server - creates the server connection to ECMWF servers</span> 201 <span class="sd"> * mk_dates - defines the start and end date</span> 202 <span class="sd"> * remove_old - deletes old retrieved grib files</span> 203 <span class="sd"> * do_retrievement - creates individual retrievals</span> 204 205 <span class="sd">Type: get_mars_data.py --help</span> 206 <span class="sd">to get information about command line parameters.</span> 207 <span class="sd">Read the documentation for usage instructions.</span> 208 <span class="sd">'''</span> 198 209 <span class="c1"># ------------------------------------------------------------------------------</span> 199 210 <span class="c1"># MODULES</span> … … 205 216 206 217 <span class="c1"># software specific classes and modules from flex_extract</span> 218 <span class="c1"># add path to local main python path for flex_extract to get full access</span> 207 219 <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> 208 220 <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> 209 221 <span class="kn">import</span> <span class="nn">_config</span> 210 <span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_arg uments</span><span class="p">,</span>222 <span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> 211 223 <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> 212 224 <span class="kn">from</span> <span class="nn">classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> 213 225 <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> 226 <span class="kn">from</span> <span class="nn">classes.MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> 214 227 215 228 <span class="k">try</span><span class="p">:</span> … … 235 248 <span class="sd"> '''</span> 236 249 237 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arg uments</span><span class="p">()</span>250 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> 238 251 <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> 239 252 … … 244 257 245 258 <span class="n">get_mars_data</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> 246 <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mail fail</span><span class="p">,</span> <span class="s1">'Done!'</span><span class="p">)</span>259 <span class="n">normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailops</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">queue</span><span class="p">,</span> <span class="s1">'Done!'</span><span class="p">)</span> 247 260 248 261 <span class="k">return</span></div> … … 257 270 <span class="sd"> Parameters</span> 258 271 <span class="sd"> ----------</span> 259 <span class="sd"> c : :obj:`ControlFile`</span>272 <span class="sd"> c : ControlFile</span> 260 273 <span class="sd"> Contains all the parameters of CONTROL file and</span> 261 274 <span class="sd"> command line.</span> … … 265 278 266 279 <span class="sd"> '''</span> 280 <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span> 267 281 268 282 <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">):</span> 269 283 <span class="n">make_dir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> 270 284 271 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>285 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> 272 286 <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data!"</span><span class="p">)</span> 273 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> 274 <span class="nb">print</span><span class="p">(</span><span class="s2">"Printing mars requests!"</span><span class="p">)</span> 287 <span class="k">else</span><span class="p">:</span> 288 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> 289 <span class="nb">print</span><span class="p">(</span><span class="s2">"Printing mars requests!"</span><span class="p">)</span> 290 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 291 <span class="nb">print</span><span class="p">(</span><span class="s2">"Retrieving EC data and printing mars request!"</span><span class="p">)</span> 292 <span class="n">write_reqheader</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FILE_MARS_REQUESTS</span><span class="p">))</span> 275 293 276 294 <span class="nb">print</span><span class="p">(</span><span class="s2">"start date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">))</span> 277 295 <span class="nb">print</span><span class="p">(</span><span class="s2">"end date </span><span class="si">%s</span><span class="s2"> "</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">))</span> 278 296 279 <span class="k">if</span> <span class="n">ecapi</span><span class="p">:</span> 297 <span class="n">server</span> <span class="o">=</span> <span class="n">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> 298 299 <span class="c1"># if data are to be retrieved, clean up any old grib files</span> 300 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 301 <span class="n">remove_old</span><span class="p">(</span><span class="s1">'*grb'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> 302 303 <span class="c1"># -------------- flux data ------------------------------------------------</span> 304 <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> 305 <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> 306 307 <span class="c1"># -------------- non flux data --------------------------------------------</span> 308 <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span> <span class="o">=</span> <span class="n">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 309 <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 310 311 <span class="k">return</span></div> 312 313 <div class="viewcode-block" id="write_reqheader"><a class="viewcode-back" href="../api.html#get_mars_data.write_reqheader">[docs]</a><span class="k">def</span> <span class="nf">write_reqheader</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span> 314 <span class="sd">'''Writes header with column names into mars request file.</span> 315 316 <span class="sd"> Parameters</span> 317 <span class="sd"> ----------</span> 318 <span class="sd"> marsfile : str</span> 319 <span class="sd"> Path to the mars request file.</span> 320 321 <span class="sd"> Return</span> 322 <span class="sd"> ------</span> 323 324 <span class="sd"> '''</span> 325 <span class="n">MR</span> <span class="o">=</span> <span class="n">MarsRetrieval</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> 326 <span class="n">attrs</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="n">MR</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> 327 <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'server'</span><span class="p">]</span> 328 <span class="k">del</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'public'</span><span class="p">]</span> 329 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">marsfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 330 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'request_number'</span> <span class="o">+</span> <span class="s1">', '</span><span class="p">)</span> 331 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">attrs</span><span class="o">.</span><span class="n">iterkeys</span><span class="p">())))</span> 332 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 333 334 <span class="k">return</span></div> 335 336 <div class="viewcode-block" id="mk_server"><a class="viewcode-back" href="../api.html#get_mars_data.mk_server">[docs]</a><span class="k">def</span> <span class="nf">mk_server</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> 337 <span class="sd">'''Creates server connection if ECMWF WebAPI is available.</span> 338 339 <span class="sd"> Parameters</span> 340 <span class="sd"> ----------</span> 341 <span class="sd"> c : ControlFile</span> 342 <span class="sd"> Contains all the parameters of CONTROL file and</span> 343 <span class="sd"> command line.</span> 344 345 <span class="sd"> Return</span> 346 <span class="sd"> ------</span> 347 <span class="sd"> server : ECMWFDataServer or ECMWFService</span> 348 <span class="sd"> Connection to ECMWF server via python interface ECMWF WebAPI.</span> 349 350 <span class="sd"> '''</span> 351 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">:</span> 280 352 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">public</span><span class="p">:</span> 281 353 <span class="n">server</span> <span class="o">=</span> <span class="n">ecmwfapi</span><span class="o">.</span><span class="n">ECMWFDataServer</span><span class="p">()</span> … … 285 357 <span class="n">server</span> <span class="o">=</span> <span class="kc">False</span> 286 358 287 <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span>288 359 <span class="nb">print</span><span class="p">(</span><span class="s1">'Using ECMWF WebAPI: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecapi</span><span class="p">))</span> 289 360 290 <span class="c1"># basetime geht rückwärts</span> 291 292 <span class="c1"># if basetime 00</span> 293 <span class="c1"># dann wird von 12 am vortag bis 00 am start tag geholt</span> 294 <span class="c1"># aber ohne 12 selbst sondern 12 + step</span> 295 296 <span class="c1"># if basetime 12</span> 297 <span class="c1"># dann wird von 00 + step bis 12 am start tag geholt</span> 298 299 <span class="c1"># purer forecast wird vorwärts bestimmt.</span> 300 <span class="c1"># purer forecast mode ist dann wenn größer 24 stunden</span> 301 <span class="c1"># wie kann das noch festgestellt werden ????</span> 302 <span class="c1"># nur FC und steps mehr als 24 ?</span> 303 <span class="c1"># die einzige problematik beim reinen forecast ist die benennung der files!</span> 304 <span class="c1"># also sobald es Tagesüberschneidungen gibt</span> 305 <span class="c1"># allerdings ist das relevant und ersichtlich an den NICHT FLUSS DATEN</span> 306 361 <span class="k">return</span> <span class="n">server</span></div> 362 363 364 <div class="viewcode-block" id="mk_dates"><a class="viewcode-back" href="../api.html#get_mars_data.mk_dates">[docs]</a><span class="k">def</span> <span class="nf">mk_dates</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="p">):</span> 365 <span class="sd">'''Prepares start and end date depending on flux or non flux data.</span> 366 367 <span class="sd"> If forecast for maximum one day (upto 24h) are to be retrieved, then</span> 368 <span class="sd"> collect accumulation data (flux data) with additional days in the</span> 369 <span class="sd"> beginning and at the end (used for complete disaggregation of</span> 370 <span class="sd"> original period)</span> 371 372 <span class="sd"> If forecast data longer than 24h are to be retrieved, then</span> 373 <span class="sd"> collect accumulation data (flux data) with the exact start and end date</span> 374 <span class="sd"> (disaggregation will be done for the exact time period with</span> 375 <span class="sd"> boundary conditions)</span> 376 377 <span class="sd"> Since for basetime the extraction contains the 12 hours upfront,</span> 378 <span class="sd"> if basetime is 0, the starting date has to be the day before and</span> 379 380 <span class="sd"> Parameters</span> 381 <span class="sd"> ----------</span> 382 <span class="sd"> c : ControlFile</span> 383 <span class="sd"> Contains all the parameters of CONTROL file and</span> 384 <span class="sd"> command line.</span> 385 386 <span class="sd"> fluxes : boolean, optional</span> 387 <span class="sd"> Decides if the flux parameter settings are stored or</span> 388 <span class="sd"> the rest of the parameter list.</span> 389 <span class="sd"> Default value is False.</span> 390 391 <span class="sd"> Return</span> 392 <span class="sd"> ------</span> 393 <span class="sd"> start : datetime</span> 394 <span class="sd"> The start date of the retrieving data set.</span> 395 396 <span class="sd"> end : datetime</span> 397 <span class="sd"> The end date of the retrieving data set.</span> 398 399 <span class="sd"> chunk : datetime</span> 400 <span class="sd"> Time period in days for one single mars retrieval.</span> 401 402 <span class="sd"> '''</span> 307 403 <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> 308 404 <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> 309 <span class="c1"># time period for one single retrieval</span> 310 <span class="n">datechunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">date_chunk</span><span class="p">))</span> 311 312 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> 405 <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">date_chunk</span><span class="p">))</span> 406 407 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> 408 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> 409 <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 410 411 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span> <span class="ow">and</span> <span class="n">fluxes</span><span class="p">:</span> 313 412 <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 314 315 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> 316 <span class="n">startm1</span> <span class="o">=</span> <span class="n">start</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 317 318 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'12'</span><span class="p">:</span> 319 <span class="c1"># endp1 = end + timedelta(days=1)</span> 320 <span class="n">endp1</span> <span class="o">=</span> <span class="n">end</span> 321 <span class="k">else</span><span class="p">:</span> 322 <span class="c1"># endp1 = end + timedelta(days=2)</span> 323 <span class="n">endp1</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 324 325 <span class="c1"># -------------- flux data ------------------------------------------------</span> 326 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 327 <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old flux content of '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> 328 <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> 329 <span class="s1">'*_acc_*.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.*.grb'</span><span class="p">)</span> 330 <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> 331 332 <span class="c1"># if forecast for maximum one day (upto 24h) are to be retrieved,</span> 333 <span class="c1"># collect accumulation data (flux data)</span> 334 <span class="c1"># with additional days in the beginning and at the end</span> 335 <span class="c1"># (used for complete disaggregation of original period)</span> 336 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o"><=</span> <span class="mi">24</span><span class="p">:</span> 337 <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">startm1</span><span class="p">,</span> <span class="n">endp1</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> 338 339 <span class="c1"># if forecast data longer than 24h are to be retrieved,</span> 340 <span class="c1"># collect accumulation data (flux data)</span> 341 <span class="c1"># with the exact start and end date</span> 342 <span class="c1"># (disaggregation will be done for the</span> 343 <span class="c1"># exact time period with boundary conditions)</span> 344 <span class="k">else</span><span class="p">:</span> 345 <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> 346 347 <span class="c1"># -------------- non flux data --------------------------------------------</span> 348 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 349 <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old non flux content of '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">)</span> 350 <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> 351 <span class="s1">'*__*.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> <span class="o">+</span> <span class="s1">'.*.grb'</span><span class="p">)</span> 352 <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> 353 354 <span class="n">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">datechunk</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 413 <span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 414 415 <span class="k">return</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">chunk</span></div> 416 417 <div class="viewcode-block" id="remove_old"><a class="viewcode-back" href="../api.html#get_mars_data.remove_old">[docs]</a><span class="k">def</span> <span class="nf">remove_old</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">inputdir</span><span class="p">):</span> 418 <span class="sd">'''Deletes old retrieval files from current input directory</span> 419 <span class="sd"> matching the pattern.</span> 420 421 <span class="sd"> Parameters</span> 422 <span class="sd"> ----------</span> 423 <span class="sd"> pattern : str</span> 424 <span class="sd"> The sub string pattern which identifies the files to be deleted.</span> 425 426 <span class="sd"> inputdir : str, optional</span> 427 <span class="sd"> Path to the directory where the retrieved data is stored.</span> 428 429 <span class="sd"> Return</span> 430 <span class="sd"> ------</span> 431 432 <span class="sd"> '''</span> 433 <span class="nb">print</span><span class="p">(</span><span class="s1">'... removing old content of '</span> <span class="o">+</span> <span class="n">inputdir</span><span class="p">)</span> 434 435 <span class="n">tobecleaned</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">inputdir</span><span class="p">,</span> <span class="n">pattern</span><span class="p">)</span> 436 <span class="n">tobecleaned</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span> 355 437 356 438 <span class="k">return</span></div> 439 357 440 358 441 <div class="viewcode-block" id="do_retrievement"><a class="viewcode-back" href="../api.html#get_mars_data.do_retrievement">[docs]</a><span class="k">def</span> <span class="nf">do_retrievement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">delta_t</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> … … 362 445 <span class="sd"> Parameters</span> 363 446 <span class="sd"> ----------</span> 364 <span class="sd"> c : :obj:`ControlFile`</span>447 <span class="sd"> c : ControlFile</span> 365 448 <span class="sd"> Contains all the parameters of CONTROL file and</span> 366 449 <span class="sd"> command line.</span> 367 450 368 <span class="sd"> server : :obj:`ECMWFService`</span>451 <span class="sd"> server : ECMWFService or ECMWFDataServer</span> 369 452 <span class="sd"> The server connection to ECMWF.</span> 370 453 371 <span class="sd"> start : :obj:`datetime`</span>454 <span class="sd"> start : datetime</span> 372 455 <span class="sd"> The start date of the retrieval.</span> 373 456 374 <span class="sd"> end : :obj:`datetime`</span>457 <span class="sd"> end : datetime</span> 375 458 <span class="sd"> The end date of the retrieval.</span> 376 459 377 <span class="sd"> delta_t : :obj:`datetime`</span>460 <span class="sd"> delta_t : datetime</span> 378 461 <span class="sd"> Delta_t + 1 is the maximal time period of a single</span> 379 462 <span class="sd"> retrieval.</span> 380 463 381 <span class="sd"> fluxes : :obj:`boolean`, optional</span>464 <span class="sd"> fluxes : boolean, optional</span> 382 465 <span class="sd"> Decides if the flux parameters are to be retrieved or</span> 383 466 <span class="sd"> the rest of the parameter list.</span> … … 430 513 <div role="contentinfo"> 431 514 <p> 432 © Copyright 2018, Anne Philipp and Leopold Haimberger .515 © Copyright 2018, Anne Philipp and Leopold Haimberger 433 516 434 517 </p> … … 449 532 450 533 451 <script type="text/javascript"> 452 var DOCUMENTATION_OPTIONS = { 453 URL_ROOT:'../', 454 VERSION:'7.1 alpha', 455 LANGUAGE:'None', 456 COLLAPSE_INDEX:false, 457 FILE_SUFFIX:'.html', 458 HAS_SOURCE: true, 459 SOURCELINK_SUFFIX: '.txt' 460 }; 461 </script> 462 <script type="text/javascript" src="../_static/jquery.js"></script> 463 <script type="text/javascript" src="../_static/underscore.js"></script> 464 <script type="text/javascript" src="../_static/doctools.js"></script> 465 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 534 535 536 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 537 <script type="text/javascript" src="../_static/jquery.js"></script> 538 <script type="text/javascript" src="../_static/underscore.js"></script> 539 <script type="text/javascript" src="../_static/doctools.js"></script> 540 466 541 467 542 -
documentation/Sphinx/build/html/_modules/index.html
r274f9ef r2625ca8 152 152 <ul><li><a href="ControlFile.html">ControlFile</a></li> 153 153 <li><a href="EcFlexpart.html">EcFlexpart</a></li> 154 <li><a href="Grib Tools.html">GribTools</a></li>154 <li><a href="GribUtil.html">GribUtil</a></li> 155 155 <li><a href="MarsRetrieval.html">MarsRetrieval</a></li> 156 156 <li><a href="UioFiles.html">UioFiles</a></li> … … 173 173 <div role="contentinfo"> 174 174 <p> 175 © Copyright 2018, Anne Philipp and Leopold Haimberger .175 © Copyright 2018, Anne Philipp and Leopold Haimberger 176 176 177 177 </p> … … 192 192 193 193 194 <script type="text/javascript"> 195 var DOCUMENTATION_OPTIONS = { 196 URL_ROOT:'../', 197 VERSION:'7.1 alpha', 198 LANGUAGE:'None', 199 COLLAPSE_INDEX:false, 200 FILE_SUFFIX:'.html', 201 HAS_SOURCE: true, 202 SOURCELINK_SUFFIX: '.txt' 203 }; 204 </script> 205 <script type="text/javascript" src="../_static/jquery.js"></script> 206 <script type="text/javascript" src="../_static/underscore.js"></script> 207 <script type="text/javascript" src="../_static/doctools.js"></script> 208 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 194 195 196 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 197 <script type="text/javascript" src="../_static/jquery.js"></script> 198 <script type="text/javascript" src="../_static/underscore.js"></script> 199 <script type="text/javascript" src="../_static/doctools.js"></script> 200 209 201 210 202 -
documentation/Sphinx/build/html/_modules/install.html
r274f9ef r2625ca8 167 167 <span class="c1"># - splitted code in smaller functions</span> 168 168 <span class="c1"># - delete convert build files in here instead of compile job script</span> 169 <span class="c1"># - changed static path names to Variables from config file</span> 169 <span class="c1"># - changed static path names to variables from config file</span> 170 <span class="c1"># - splitted install function into several smaller pieces</span> 171 <span class="c1"># - use of tarfile package in python</span> 170 172 <span class="c1">#</span> 171 173 <span class="c1"># @License:</span> 172 <span class="c1"># (C) Copyright 2015-2018.</span> 174 <span class="c1"># (C) Copyright 2014-2019.</span> 175 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 173 176 <span class="c1">#</span> 174 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 175 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 177 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 178 <span class="c1"># International License. To view a copy of this license, visit</span> 179 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 180 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 176 181 <span class="c1">#</span> 177 <span class="c1"># @Program Functionality:</span> 178 <span class="c1"># Depending on the selected installation environment (locally or on the</span> 179 <span class="c1"># ECMWF server ecgate or cca) the program extracts the commandline</span> 180 <span class="c1"># arguments and the CONTROL file parameter and prepares the corresponding</span> 181 <span class="c1"># environment. The necessary files are collected in a tar-ball and placed</span> 182 <span class="c1"># at the target location. There its untared, the environment variables will</span> 183 <span class="c1"># be set and the Fortran code will be compiled. If the ECMWF environment is</span> 184 <span class="c1"># selected a job script is prepared and submitted for the remaining</span> 185 <span class="c1"># configurations after putting the tar-ball to the target ECMWF server.</span> 186 <span class="c1">#</span> 187 <span class="c1"># @Program Content:</span> 188 <span class="c1"># - main</span> 189 <span class="c1"># - get_install_cmdline_arguments</span> 190 <span class="c1"># - install_via_gateway</span> 191 <span class="c1"># - mk_tarball</span> 192 <span class="c1"># - un_tarball</span> 193 <span class="c1"># - mk_env_vars</span> 194 <span class="c1"># - mk_compilejob</span> 195 <span class="c1"># - mk_job_template</span> 196 <span class="c1"># - delete_convert_build</span> 197 <span class="c1"># - make_convert_build</span> 182 <span class="c1"># @Methods:</span> 183 <span class="c1"># main</span> 184 <span class="c1"># get_install_cmdline_args</span> 185 <span class="c1"># install_via_gateway</span> 186 <span class="c1"># check_install_conditions</span> 187 <span class="c1"># mk_tarball</span> 188 <span class="c1"># un_tarball</span> 189 <span class="c1"># mk_env_vars</span> 190 <span class="c1"># mk_compilejob</span> 191 <span class="c1"># mk_job_template</span> 192 <span class="c1"># del_convert_build</span> 193 <span class="c1"># mk_convert_build</span> 198 194 <span class="c1">#</span> 199 195 <span class="c1">#*******************************************************************************</span> 196 <span class="sd">'''This script installs the flex_extract program.</span> 197 198 <span class="sd">Depending on the selected installation environment (locally or on the</span> 199 <span class="sd">ECMWF server ecgate or cca) the program extracts the commandline</span> 200 <span class="sd">arguments and the CONTROL file parameter and prepares the corresponding</span> 201 <span class="sd">environment.</span> 202 <span class="sd">The necessary files are collected in a tar-ball and placed</span> 203 <span class="sd">at the target location. There its untared, the environment variables will</span> 204 <span class="sd">be set and the Fortran code will be compiled.</span> 205 <span class="sd">If the ECMWF environment is selected a job script is prepared and submitted</span> 206 <span class="sd">for the remaining configurations after putting the tar-ball to the</span> 207 <span class="sd">target ECMWF server.</span> 208 209 <span class="sd">Type: install.py --help</span> 210 <span class="sd">to get information about command line parameters.</span> 211 <span class="sd">Read the documentation for usage instructions.</span> 212 <span class="sd">'''</span> 200 213 201 214 <span class="c1"># ------------------------------------------------------------------------------</span> … … 207 220 <span class="kn">import</span> <span class="nn">subprocess</span> 208 221 <span class="kn">import</span> <span class="nn">inspect</span> 222 <span class="kn">import</span> <span class="nn">tarfile</span> 209 223 <span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> 210 224 … … 213 227 <span class="kn">from</span> <span class="nn">classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> 214 228 <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> 215 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span> 229 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span> 230 <span class="n">silent_remove</span><span class="p">,</span> <span class="n">execute_subprocess</span><span class="p">)</span> 216 231 217 232 <span class="c1"># ------------------------------------------------------------------------------</span> … … 229 244 <span class="sd"> '''</span> 230 245 231 <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_cmdline_arg uments</span><span class="p">()</span>246 <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_cmdline_args</span><span class="p">()</span> 232 247 <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> 233 248 <span class="n">c</span><span class="o">.</span><span class="n">assign_args_to_control</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> 234 <span class="n">c </span><span class="o">.</span><span class="n">check_install_conditions</span><span class="p">()</span>249 <span class="n">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> 235 250 236 251 <span class="n">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> … … 238 253 <span class="k">return</span></div> 239 254 240 <div class="viewcode-block" id="get_install_cmdline_arg uments"><a class="viewcode-back" href="../api.html#install.get_install_cmdline_arguments">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_arguments</span><span class="p">():</span>255 <div class="viewcode-block" id="get_install_cmdline_args"><a class="viewcode-back" href="../api.html#install.get_install_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_args</span><span class="p">():</span> 241 256 <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> 242 257 <span class="sd"> Apply default values for non mentioned arguments.</span> … … 247 262 <span class="sd"> Return</span> 248 263 <span class="sd"> ------</span> 249 <span class="sd"> args : :obj:`Namespace`</span>264 <span class="sd"> args : Namespace</span> 250 265 <span class="sd"> Contains the commandline arguments from script/program call.</span> 251 266 <span class="sd"> '''</span> … … 268 283 <span class="n">help</span><span class="o">=</span><span class="s1">'ecaccess destination, e.g. leo@genericSftp'</span><span class="p">)</span> 269 284 270 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpart _root_scripts"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpart_root_scripts"</span><span class="p">,</span>285 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpartdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpartdir"</span><span class="p">,</span> 271 286 <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"FLEXPART root directory on ECMWF </span><span class="se">\</span> 272 287 <span class="s2"> servers (to find grib2flexpart and COMMAND file)</span><span class="se">\n\</span> … … 295 310 <span class="sd"> Parameters</span> 296 311 <span class="sd"> ----------</span> 297 <span class="sd"> c : :obj:`ControlFile`</span>312 <span class="sd"> c : ControlFile</span> 298 313 <span class="sd"> Contains all the parameters of CONTROL file and</span> 299 314 <span class="sd"> command line.</span> … … 315 330 316 331 <span class="n">mk_compilejob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> 317 <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">)</span>332 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> 318 333 319 334 <span class="n">mk_job_template</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> 320 <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">)</span>335 <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> 321 336 322 337 <span class="n">mk_env_vars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span> … … 331 346 <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">))</span> 332 347 348 <span class="n">silent_remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> 349 333 350 <span class="nb">print</span><span class="p">(</span><span class="s1">'job compilation script has been submitted to ecgate for '</span> <span class="o">+</span> 334 <span class="s1">'installation in '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span> <span class="o">+</span>351 <span class="s1">'installation in '</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">+</span> 335 352 <span class="s1">'/'</span> <span class="o">+</span> <span class="n">target_dirname</span><span class="p">)</span> 336 353 <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email with subject "flexcompile" within '</span> <span class="o">+</span> … … 338 355 339 356 <span class="k">else</span><span class="p">:</span> <span class="c1">#local</span> 340 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span> <span class="o">==</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="p">:</span>341 <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: FLEXPART _ROOT_SCRIPTShas not been specified'</span><span class="p">)</span>357 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">==</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="p">:</span> 358 <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: FLEXPARTDIR has not been specified'</span><span class="p">)</span> 342 359 <span class="nb">print</span><span class="p">(</span><span class="s1">'flex_extract will be installed in here by compiling the '</span> <span class="o">+</span> 343 360 <span class="s1">'Fortran source in '</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> 344 361 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span> 345 362 <span class="k">else</span><span class="p">:</span> <span class="c1"># creates the target working directory for flex_extract</span> 346 <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span>347 <span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">))</span>348 <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">):</span>363 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span> 364 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">))</span> 365 <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">):</span> 349 366 <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> 350 <span class="n">make_dir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">,</span>367 <span class="n">make_dir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> 351 368 <span class="n">target_dirname</span><span class="p">))</span> 352 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">,</span>369 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> 353 370 <span class="n">target_dirname</span><span class="p">))</span> 354 371 <span class="n">un_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span> 355 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">,</span>372 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">,</span> 356 373 <span class="n">target_dirname</span><span class="p">,</span> 357 374 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">))</span> … … 360 377 <span class="nb">print</span><span class="p">(</span><span class="s1">'Install '</span> <span class="o">+</span> <span class="n">target_dirname</span> <span class="o">+</span> <span class="s1">' software at '</span> <span class="o">+</span> 361 378 <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">+</span> <span class="s1">' in directory '</span> <span class="o">+</span> 362 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpart _root_scripts</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>363 364 <span class="n">del ete_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span>365 <span class="n">m ake_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span>379 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 380 381 <span class="n">del_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span> 382 <span class="n">mk_convert_build</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span> 366 383 367 384 <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span> … … 370 387 371 388 <span class="k">return</span></div> 389 390 <div class="viewcode-block" id="check_install_conditions"><a class="viewcode-back" href="../api.html#install.check_install_conditions">[docs]</a><span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> 391 <span class="sd">'''Checks a couple of necessary attributes and conditions</span> 392 <span class="sd"> for the installation such as if they exist and contain values.</span> 393 <span class="sd"> Otherwise set default values.</span> 394 395 <span class="sd"> Parameters</span> 396 <span class="sd"> ----------</span> 397 <span class="sd"> c : ControlFile</span> 398 <span class="sd"> Contains all the parameters of CONTROL file and</span> 399 <span class="sd"> command line.</span> 400 401 402 <span class="sd"> Return</span> 403 <span class="sd"> ------</span> 404 405 <span class="sd"> '''</span> 406 407 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> \ 408 <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">:</span> 409 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: unknown or missing installation target '</span><span class="p">)</span> 410 <span class="nb">print</span><span class="p">(</span><span class="s1">'target: '</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span> 411 <span class="nb">print</span><span class="p">(</span><span class="s1">'please specify correct installation target '</span> <span class="o">+</span> 412 <span class="nb">str</span><span class="p">(</span><span class="n">INSTALL_TARGETS</span><span class="p">))</span> 413 <span class="nb">print</span><span class="p">(</span><span class="s1">'use -h or --help for help'</span><span class="p">)</span> 414 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 415 416 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> 417 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> \ 418 <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> 419 <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id as well '</span> <span class="o">+</span> 420 <span class="s1">'as the </span><span class="se">\n</span><span class="s1">name of the local gateway and the ectrans '</span> <span class="o">+</span> 421 <span class="s1">'destination '</span><span class="p">)</span> 422 <span class="nb">print</span><span class="p">(</span><span class="s1">'with command line options --ecuid --ecgid </span><span class="se">\</span> 423 <span class="s1"> --gateway --destination'</span><span class="p">)</span> 424 <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \ 425 <span class="s1">' -h" to print usage information'</span><span class="p">)</span> 426 <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user </span><span class="se">\</span> 427 <span class="s1"> support for further details'</span><span class="p">)</span> 428 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 429 430 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">:</span> 431 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{HOME}</span><span class="s1">'</span> 432 <span class="k">else</span><span class="p">:</span> 433 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> 434 <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> 435 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span><span class="p">:</span> 436 <span class="n">c</span><span class="o">.</span><span class="n">flexpartdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> 437 438 <span class="k">return</span></div> 439 372 440 373 441 <div class="viewcode-block" id="mk_tarball"><a class="viewcode-back" href="../api.html#install.mk_tarball">[docs]</a><span class="k">def</span> <span class="nf">mk_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span> … … 381 449 <span class="sd"> Parameters</span> 382 450 <span class="sd"> ----------</span> 383 <span class="sd"> tarball_path : :obj:`string`</span>451 <span class="sd"> tarball_path : str</span> 384 452 <span class="sd"> The complete path to the tar file which will contain all</span> 385 453 <span class="sd"> relevant data for flex_extract.</span> 386 454 387 <span class="sd"> target : :obj:`string`</span>455 <span class="sd"> target : str</span> 388 456 <span class="sd"> The queue where the job is submitted to.</span> 389 457 … … 392 460 393 461 <span class="sd"> '''</span> 394 <span class="kn">import</span> <span class="nn">tarfile</span>395 462 <span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span> 396 463 … … 405 472 <span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span> 406 473 <span class="n">ECMWF_ENV_FILE</span> <span class="o">=</span> <span class="p">[]</span> 474 <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 475 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> 476 <span class="s1">'run_local.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 407 477 <span class="k">else</span><span class="p">:</span> 408 478 <span class="n">ECMWF_ENV_FILE</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_ECMWF_ENV</span><span class="p">]</span> 479 <span class="n">runfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 480 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span> 481 <span class="s1">'run.sh'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 409 482 410 483 <span class="n">pyfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 411 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_LOCAL_PYTHON</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 484 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 485 <span class="n">pytestfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 486 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHONTEST_SRC</span><span class="p">,</span> <span class="s1">'*py'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 412 487 <span class="n">controlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 413 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ CONTROLFILES</span><span class="p">,</span>488 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_CONTROLFILES</span><span class="p">,</span> 414 489 <span class="s1">'CONTROL*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 490 <span class="n">testfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 491 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEST</span> <span class="p">,</span> <span class="s1">'*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 415 492 <span class="n">tempfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 416 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 493 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*.temp'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 494 <span class="n">nlfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 495 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*.nl'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 496 <span class="n">gribtable</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 497 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span> <span class="p">,</span> <span class="s1">'*grib*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 417 498 <span class="n">ffiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 418 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.f*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>499 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.f*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 419 500 <span class="n">hfiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 420 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.h'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>501 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'*.h'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 421 502 <span class="n">makefiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span> 422 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'Makefile*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 503 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">'Makefile*'</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span> 504 <span class="n">jobdir</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">]</span> 423 505 424 506 <span class="c1"># concatenate single lists to one for a better looping</span> 425 <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> <span class="n">ffiles</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> \ 426 <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ECMWF_ENV_FILE</span> 507 <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">pytestfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> <span class="n">nlfiles</span> <span class="o">+</span> \ 508 <span class="n">ffiles</span> <span class="o">+</span> <span class="n">gribtable</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ECMWF_ENV_FILE</span> <span class="o">+</span> \ 509 <span class="n">runfile</span> <span class="o">+</span> <span class="n">jobdir</span> <span class="o">+</span> <span class="n">testfiles</span> <span class="o">+</span>\ 510 <span class="p">[</span><span class="s1">'CODE_OF_CONDUCT.md'</span><span class="p">,</span> <span class="s1">'LICENSE.md'</span><span class="p">,</span> <span class="s1">'README.md'</span><span class="p">]</span> 427 511 428 512 <span class="c1"># create installation tar-file</span> 513 <span class="n">exclude_files</span> <span class="o">=</span> <span class="p">[</span><span class="s2">".ksh"</span><span class="p">]</span> 429 514 <span class="k">try</span><span class="p">:</span> 430 515 <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="s2">"w:gz"</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> 431 516 <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">filelist</span><span class="p">:</span> 432 <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> 433 517 <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> 518 <span class="nb">filter</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tarinfo</span><span class="p">:</span> <span class="kc">None</span> 519 <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">tarinfo</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> 520 <span class="ow">in</span> <span class="n">exclude_files</span> 521 <span class="k">else</span> <span class="n">tarinfo</span><span class="p">)</span> 434 522 <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 435 523 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> 436 524 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 437 525 438 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... could not make installation tar ball!'</span><span class="p">)</span> 526 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... could not make installation tar ball!'</span><span class="p">)</span> 527 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 528 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 529 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 530 531 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> 532 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> 439 533 440 534 <span class="k">return</span></div> … … 446 540 <span class="sd"> Parameters</span> 447 541 <span class="sd"> ----------</span> 448 <span class="sd"> tarball_path : :obj:`string`</span>542 <span class="sd"> tarball_path : str</span> 449 543 <span class="sd"> The complete path to the tar file which will contain all</span> 450 544 <span class="sd"> relevant data for flex_extract.</span> … … 454 548 455 549 <span class="sd"> '''</span> 456 <span class="kn">import</span> <span class="nn">tarfile</span>457 550 458 551 <span class="nb">print</span><span class="p">(</span><span class="s1">'Untar ...'</span><span class="p">)</span> 459 552 460 <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> 461 <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span> 553 <span class="k">try</span><span class="p">:</span> 554 <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span> 555 <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span> 556 <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 557 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> 558 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> 559 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 560 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 561 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 562 563 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file '</span> <span class="o">+</span> 564 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span> 462 565 463 566 <span class="k">return</span></div> … … 470 573 <span class="sd"> Parameters</span> 471 574 <span class="sd"> ----------</span> 472 <span class="sd"> ecuid : :obj:`string`</span>575 <span class="sd"> ecuid : str</span> 473 576 <span class="sd"> The user id on ECMWF server.</span> 474 577 475 <span class="sd"> ecgid : :obj:`string`</span>578 <span class="sd"> ecgid : str</span> 476 579 <span class="sd"> The group id on ECMWF server.</span> 477 580 478 <span class="sd"> gateway : :obj:`string`</span>581 <span class="sd"> gateway : str</span> 479 582 <span class="sd"> The gateway server the user is using.</span> 480 583 481 <span class="sd"> destination : :obj:`string`</span>584 <span class="sd"> destination : str</span> 482 585 <span class="sd"> The remote destination which is used to transfer files</span> 483 586 <span class="sd"> from ECMWF server to local gateway server.</span> … … 489 592 <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> 490 593 <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> 491 492 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 493 <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span> 494 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 495 496 <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 497 <span class="n">user_group</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 498 <span class="n">gateway_name</span> <span class="o">=</span> <span class="n">gateway</span><span class="p">,</span> 499 <span class="n">destination_name</span> <span class="o">=</span> <span class="n">destination</span> 500 <span class="p">)</span> 501 502 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 503 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 594 <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> 595 596 <span class="k">try</span><span class="p">:</span> 597 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 598 <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span> 599 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 600 601 <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 602 <span class="n">user_group</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 603 <span class="n">gateway_name</span> <span class="o">=</span> <span class="n">gateway</span><span class="p">,</span> 604 <span class="n">destination_name</span> <span class="o">=</span> <span class="n">destination</span> 605 <span class="p">)</span> 606 <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 607 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 608 609 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 610 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> 611 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 612 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 613 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 614 615 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 616 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> 617 618 <span class="k">try</span><span class="p">:</span> 619 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 620 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 621 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 622 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 623 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 624 625 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> 626 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span> 504 627 505 628 <span class="k">return</span></div> … … 512 635 <span class="sd"> Parameters</span> 513 636 <span class="sd"> ----------</span> 514 <span class="sd"> makefile : :obj:`string`</span>637 <span class="sd"> makefile : str</span> 515 638 <span class="sd"> Name of the makefile which should be used to compile FORTRAN</span> 516 639 <span class="sd"> CONVERT2 program.</span> 517 640 518 <span class="sd"> target : :obj:`string`</span>641 <span class="sd"> target : str</span> 519 642 <span class="sd"> The target where the installation should be done, e.g. the queue.</span> 520 643 521 <span class="sd"> ecuid : :obj:`string`</span>644 <span class="sd"> ecuid : str</span> 522 645 <span class="sd"> The user id on ECMWF server.</span> 523 646 524 <span class="sd"> ecgid : :obj:`string`</span>647 <span class="sd"> ecgid : str</span> 525 648 <span class="sd"> The group id on ECMWF server.</span> 526 649 527 <span class="sd"> fp_root : :obj:`string`</span>650 <span class="sd"> fp_root : str</span> 528 651 <span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> 529 652 <span class="sd"> environment.</span> … … 535 658 <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> 536 659 <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> 537 538 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 539 <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span> 540 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 660 <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> 541 661 542 662 <span class="k">if</span> <span class="n">fp_root</span> <span class="o">==</span> <span class="s1">'../'</span><span class="p">:</span> 543 663 <span class="n">fp_root</span> <span class="o">=</span> <span class="s1">'$HOME'</span> 544 664 545 <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 546 <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 547 <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 548 <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> 549 <span class="n">fp_root_scripts</span> <span class="o">=</span> <span class="n">fp_root</span><span class="p">,</span> 550 <span class="n">makefile</span> <span class="o">=</span> <span class="n">makefile</span><span class="p">,</span> 551 <span class="n">fortran_program</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span> 552 <span class="p">)</span> 553 554 <span class="n">compilejob</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> 555 <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span> 556 557 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 558 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 665 <span class="k">try</span><span class="p">:</span> 666 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 667 <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span> 668 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 669 670 <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 671 <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 672 <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 673 <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> 674 <span class="n">fp_root_scripts</span> <span class="o">=</span> <span class="n">fp_root</span><span class="p">,</span> 675 <span class="n">makefile</span> <span class="o">=</span> <span class="n">makefile</span><span class="p">,</span> 676 <span class="n">fortran_program</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span> 677 <span class="p">)</span> 678 <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 679 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 680 681 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 682 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> 683 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 684 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 685 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 686 687 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 688 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span> 689 690 <span class="k">try</span><span class="p">:</span> 691 <span class="n">compilejob</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> 692 <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span> 693 694 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 695 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 696 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 697 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 698 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 699 700 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> 701 <span class="n">compilejob</span><span class="p">)</span> 559 702 560 703 <span class="k">return</span></div> … … 567 710 <span class="sd"> Parameters</span> 568 711 <span class="sd"> ----------</span> 569 <span class="sd"> ecuid : :obj:`string`</span>712 <span class="sd"> ecuid : str</span> 570 713 <span class="sd"> The user id on ECMWF server.</span> 571 714 572 <span class="sd"> ecgid : :obj:`string`</span>715 <span class="sd"> ecgid : str</span> 573 716 <span class="sd"> The group id on ECMWF server.</span> 574 717 575 <span class="sd"> gateway : :obj:`string`</span>718 <span class="sd"> gateway : str</span> 576 719 <span class="sd"> The gateway server the user is using.</span> 577 720 578 <span class="sd"> destination : :obj:`string`</span>721 <span class="sd"> destination : str</span> 579 722 <span class="sd"> The remote destination which is used to transfer files</span> 580 723 <span class="sd"> from ECMWF server to local gateway server.</span> 581 724 582 <span class="sd"> fp_root : :obj:`string`</span>725 <span class="sd"> fp_root : str</span> 583 726 <span class="sd"> Path to the root directory of FLEXPART environment or flex_extract</span> 584 727 <span class="sd"> environment.</span> … … 590 733 <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> 591 734 <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> 592 593 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 594 <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span> 595 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 735 <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> 596 736 597 737 <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fp_root</span><span class="p">,</span> 598 738 <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span> 599 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON</span><span class="p">)</span> 600 601 <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 602 <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 603 <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 604 <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> 605 <span class="n">fp_root_path</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">,</span> 606 <span class="p">)</span> 607 608 <span class="n">tempjobfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> 609 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span> 610 611 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 612 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 739 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">)</span> 740 <span class="k">if</span> <span class="s1">'$'</span> <span class="ow">in</span> <span class="n">fp_root_path_to_python</span><span class="p">:</span> 741 <span class="n">ind</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'$'</span><span class="p">)</span> 742 <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">ind</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'$'</span> <span class="o">+</span> \ 743 <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="n">ind</span><span class="p">:]</span> 744 745 <span class="k">try</span><span class="p">:</span> 746 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 747 <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span> 748 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 749 750 <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span> 751 <span class="n">usergroup</span> <span class="o">=</span> <span class="n">ecgid</span><span class="p">,</span> 752 <span class="n">username</span> <span class="o">=</span> <span class="n">ecuid</span><span class="p">,</span> 753 <span class="n">version_number</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span> 754 <span class="n">fp_root_path</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">,</span> 755 <span class="p">)</span> 756 <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 757 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 758 759 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 760 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> 761 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 762 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 763 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 764 765 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template '</span> <span class="o">+</span> 766 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span> 767 768 769 <span class="k">try</span><span class="p">:</span> 770 <span class="n">tempjobfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> 771 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span> 772 773 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 774 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 775 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 776 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 777 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 778 779 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> 780 <span class="n">tempjobfile</span><span class="p">)</span> 613 781 614 782 <span class="k">return</span></div> 615 783 616 <div class="viewcode-block" id="del ete_convert_build"><a class="viewcode-back" href="../api.html#install.delete_convert_build">[docs]</a><span class="k">def</span> <span class="nf">delete_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span>784 <div class="viewcode-block" id="del_convert_build"><a class="viewcode-back" href="../api.html#install.del_convert_build">[docs]</a><span class="k">def</span> <span class="nf">del_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span> 617 785 <span class="sd">'''Clean up the Fortran source directory and remove all</span> 618 786 <span class="sd"> build files (e.g. \*.o, \*.mod and CONVERT2)</span> … … 620 788 <span class="sd"> Parameters</span> 621 789 <span class="sd"> ----------</span> 622 <span class="sd"> src_path : :obj:`string`</span>790 <span class="sd"> src_path : str</span> 623 791 <span class="sd"> Path to the fortran source directory.</span> 624 792 … … 638 806 <span class="k">return</span></div> 639 807 640 <div class="viewcode-block" id="m ake_convert_build"><a class="viewcode-back" href="../api.html#install.make_convert_build">[docs]</a><span class="k">def</span> <span class="nf">make_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span>808 <div class="viewcode-block" id="mk_convert_build"><a class="viewcode-back" href="../api.html#install.mk_convert_build">[docs]</a><span class="k">def</span> <span class="nf">mk_convert_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span> 641 809 <span class="sd">'''Compiles the Fortran code and generates the executable.</span> 642 810 643 811 <span class="sd"> Parameters</span> 644 812 <span class="sd"> ----------</span> 645 <span class="sd"> src_path : :obj:`string`</span>813 <span class="sd"> src_path : str</span> 646 814 <span class="sd"> Path to the fortran source directory.</span> 647 815 648 <span class="sd"> makefile : :obj:`string`</span>816 <span class="sd"> makefile : str</span> 649 817 <span class="sd"> The name of the makefile which should be used.</span> 650 818 … … 677 845 <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> 678 846 <span class="k">else</span><span class="p">:</span> 679 <span class="n"> subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'ls'</span><span class="p">,</span> <span class="s1">'-l'</span><span class="p">,</span>680 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span>681 <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)])</span>847 <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">'ls'</span><span class="p">,</span> <span class="s1">'-l'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> 848 <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span> <span class="n">error_msg</span><span class="o">=</span> 849 <span class="s1">'FORTRAN EXECUTABLE COULD NOT BE FOUND!'</span><span class="p">)</span> 682 850 683 851 <span class="k">return</span></div> … … 698 866 <div role="contentinfo"> 699 867 <p> 700 © Copyright 2018, Anne Philipp and Leopold Haimberger .868 © Copyright 2018, Anne Philipp and Leopold Haimberger 701 869 702 870 </p> … … 717 885 718 886 719 <script type="text/javascript"> 720 var DOCUMENTATION_OPTIONS = { 721 URL_ROOT:'../', 722 VERSION:'7.1 alpha', 723 LANGUAGE:'None', 724 COLLAPSE_INDEX:false, 725 FILE_SUFFIX:'.html', 726 HAS_SOURCE: true, 727 SOURCELINK_SUFFIX: '.txt' 728 }; 729 </script> 730 <script type="text/javascript" src="../_static/jquery.js"></script> 731 <script type="text/javascript" src="../_static/underscore.js"></script> 732 <script type="text/javascript" src="../_static/doctools.js"></script> 733 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 887 888 889 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 890 <script type="text/javascript" src="../_static/jquery.js"></script> 891 <script type="text/javascript" src="../_static/underscore.js"></script> 892 <script type="text/javascript" src="../_static/doctools.js"></script> 893 734 894 735 895 -
documentation/Sphinx/build/html/_modules/prepare_flexpart.html
r274f9ef r2625ca8 175 175 <span class="c1"># - added documentation</span> 176 176 <span class="c1"># - minor changes in programming style for consistence</span> 177 <span class="c1"># - BUG : removed call of clean_up-Function after call of</span>177 <span class="c1"># - BUGFIX: removed call of clean_up-Function after call of</span> 178 178 <span class="c1"># prepareFlexpart in main since it is already called in</span> 179 179 <span class="c1"># prepareFlexpart at the end!</span> … … 182 182 <span class="c1">#</span> 183 183 <span class="c1"># @License:</span> 184 <span class="c1"># (C) Copyright 2014-2018.</span> 185 <span class="c1">#</span> 186 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 187 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 188 <span class="c1">#</span> 189 <span class="c1"># @Program Functionality:</span> 190 <span class="c1"># This program prepares the final version of the grib files which are</span> 191 <span class="c1"># then used by FLEXPART. It converts the bunch of grib files extracted</span> 192 <span class="c1"># via get_mars_data by doing for example the necessary conversion to get</span> 193 <span class="c1"># consistent grids or the disaggregation of flux data. Finally, the</span> 194 <span class="c1"># program combines the data fields in files per available hour with the</span> 195 <span class="c1"># naming convention xxYYMMDDHH, where xx should be 2 arbitrary letters</span> 196 <span class="c1"># (mostly xx is chosen to be "EN").</span> 197 <span class="c1">#</span> 198 <span class="c1"># @Program Content:</span> 199 <span class="c1"># - main</span> 200 <span class="c1"># - prepare_flexpart</span> 201 <span class="c1">#</span> 184 <span class="c1"># (C) Copyright 2014-2019.</span> 185 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 186 <span class="c1">#</span> 187 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 188 <span class="c1"># International License. To view a copy of this license, visit</span> 189 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 190 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 202 191 <span class="c1">#*******************************************************************************</span> 192 <span class="sd">'''This script prepares the final version of the grib files which are</span> 193 <span class="sd">then used by FLEXPART.</span> 194 195 <span class="sd">It converts the bunch of grib files extracted via get_mars_data before,</span> 196 <span class="sd">by doing the necessary conversion to get consistent grids or the</span> 197 <span class="sd">disaggregation of flux data. Finally, the data fields are combined</span> 198 <span class="sd">in files per available hour with the naming convention xxYYMMDDHH,</span> 199 <span class="sd">where xx should be 2 arbitrary letters (mostly xx is chosen to be "EN").</span> 200 201 <span class="sd">This file can also be imported as a module which then contains the following</span> 202 <span class="sd">functions:</span> 203 204 <span class="sd"> * main</span> 205 <span class="sd"> * prepare_flexpart</span> 206 207 <span class="sd">Type: prepare_flexpart.py --help</span> 208 <span class="sd">to get information about command line parameters.</span> 209 <span class="sd">Read the documentation for usage instructions.</span> 210 <span class="sd">'''</span> 203 211 204 212 <span class="c1"># ------------------------------------------------------------------------------</span> … … 212 220 213 221 <span class="c1"># software specific classes and modules from flex_extract</span> 214 222 <span class="c1"># add path to local main python path for flex_extract to get full access</span> 215 223 <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span> 216 224 <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> 217 225 <span class="kn">import</span> <span class="nn">_config</span> 226 <span class="kn">from</span> <span class="nn">checks</span> <span class="k">import</span> <span class="n">check_ppid</span> 218 227 <span class="kn">from</span> <span class="nn">classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> 219 228 <span class="kn">from</span> <span class="nn">classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> 220 <span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">get_cmdline_arg uments</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span>229 <span class="kn">from</span> <span class="nn">tools</span> <span class="k">import</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">,</span> <span class="n">make_dir</span> 221 230 <span class="kn">from</span> <span class="nn">classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> 222 231 … … 245 254 <span class="sd"> '''</span> 246 255 247 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arg uments</span><span class="p">()</span>256 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> 248 257 <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> 249 258 … … 267 276 <span class="sd"> Parameters</span> 268 277 <span class="sd"> ----------</span> 269 <span class="sd"> ppid : :obj:`int`</span>278 <span class="sd"> ppid : int</span> 270 279 <span class="sd"> Contains the ppid number of the current ECMWF job. It will be None if</span> 271 280 <span class="sd"> the method was called within this module.</span> 272 281 273 <span class="sd"> c : :obj:`ControlFile`</span>282 <span class="sd"> c : ControlFile</span> 274 283 <span class="sd"> Contains all the parameters of CONTROL file and</span> 275 284 <span class="sd"> command line.</span> … … 279 288 280 289 <span class="sd"> '''</span> 281 282 <span class="k">if</span> <span class="ow">not</span> <span class="n">ppid</span><span class="p">:</span> 283 <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span> 284 <span class="k">else</span><span class="p">:</span> 285 <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="n">ppid</span> 290 <span class="n">check_ppid</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span> 286 291 287 292 <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="o">=</span> <span class="n">ecapi</span> … … 296 301 <span class="n">day</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">[</span><span class="mi">6</span><span class="p">:]))</span> 297 302 303 <span class="c1"># if basetime is 00</span> 298 304 <span class="c1"># assign starting date minus 1 day</span> 299 <span class="c1"># since for basetime 00we need the 12 hours upfront</span>305 <span class="c1"># since we need the 12 hours upfront</span> 300 306 <span class="c1"># (the day before from 12 UTC to current day 00 UTC)</span> 301 307 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span> <span class="o">==</span> <span class="s1">'00'</span><span class="p">:</span> … … 317 323 <span class="n">flexpart</span><span class="o">.</span><span class="n">deacc_fluxes</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> 318 324 319 <span class="c1"># get a list of all files from the root inputdir</span>325 <span class="c1"># get a list of all other files</span> 320 326 <span class="n">inputfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s1">'????__??.*'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ppid</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'.*'</span><span class="p">)</span> 321 327 … … 325 331 <span class="n">flexpart</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">inputfiles</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> 326 332 <span class="n">flexpart</span><span class="o">.</span><span class="n">process_output</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> 333 334 <span class="c1"># make use of a possible conversion to a</span> 335 <span class="c1"># specific flexpart binary format</span> 327 336 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">grib2flexpart</span><span class="p">:</span> 328 <span class="c1"># prepare environment for a FLEXPART run</span>329 <span class="c1"># to convert grib to flexpart binary format</span>330 337 <span class="n">flexpart</span><span class="o">.</span><span class="n">prepare_fp_files</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> 331 338 … … 353 360 <div role="contentinfo"> 354 361 <p> 355 © Copyright 2018, Anne Philipp and Leopold Haimberger .362 © Copyright 2018, Anne Philipp and Leopold Haimberger 356 363 357 364 </p> … … 372 379 373 380 374 <script type="text/javascript"> 375 var DOCUMENTATION_OPTIONS = { 376 URL_ROOT:'../', 377 VERSION:'7.1 alpha', 378 LANGUAGE:'None', 379 COLLAPSE_INDEX:false, 380 FILE_SUFFIX:'.html', 381 HAS_SOURCE: true, 382 SOURCELINK_SUFFIX: '.txt' 383 }; 384 </script> 385 <script type="text/javascript" src="../_static/jquery.js"></script> 386 <script type="text/javascript" src="../_static/underscore.js"></script> 387 <script type="text/javascript" src="../_static/doctools.js"></script> 388 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 381 382 383 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 384 <script type="text/javascript" src="../_static/jquery.js"></script> 385 <script type="text/javascript" src="../_static/underscore.js"></script> 386 <script type="text/javascript" src="../_static/doctools.js"></script> 387 389 388 390 389 -
documentation/Sphinx/build/html/_modules/submit.html
r274f9ef r2625ca8 171 171 <span class="c1"># - changed path names to variables from config file</span> 172 172 <span class="c1"># - added option for writing mars requests to extra file</span> 173 <span class="c1"># additionally,as option without submitting the mars jobs</span> 173 <span class="c1"># additionally, as option without submitting the mars jobs</span> 174 <span class="c1"># - splitted submit function to use genshi templates for the</span> 175 <span class="c1"># job script and avoid code duplication</span> 174 176 <span class="c1">#</span> 175 177 <span class="c1"># @License:</span> 176 <span class="c1"># (C) Copyright 2014-2018.</span> 177 <span class="c1">#</span> 178 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 179 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 180 <span class="c1">#</span> 181 <span class="c1"># @Program Functionality:</span> 182 <span class="c1"># This program is the main program of flex_extract and controls the</span> 183 <span class="c1"># program flow.</span> 184 <span class="c1"># If it is supposed to work locally then it works through the necessary</span> 185 <span class="c1"># functions get_mars_data and prepareFlexpart. Otherwise it prepares</span> 186 <span class="c1"># a shell job script which will do the necessary work on the</span> 187 <span class="c1"># ECMWF server and is submitted via ecaccess-job-submit.</span> 188 <span class="c1">#</span> 189 <span class="c1"># @Program Content:</span> 190 <span class="c1"># - main</span> 191 <span class="c1"># - submit</span> 192 <span class="c1">#</span> 178 <span class="c1"># (C) Copyright 2014-2019.</span> 179 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 180 <span class="c1">#</span> 181 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 182 <span class="c1"># International License. To view a copy of this license, visit</span> 183 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 184 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 193 185 <span class="c1">#*******************************************************************************</span> 186 <span class="sd">'''This script allows the user to extract meteorological fields from the ECMWF.</span> 187 188 <span class="sd">It prepares the settings for retrieving the data from ECMWF servers and</span> 189 <span class="sd">process the resulting files to prepare them for the use with FLEXPART or</span> 190 <span class="sd">FLEXTRA.</span> 191 192 <span class="sd">If it is supposed to work locally then it works through the necessary</span> 193 <span class="sd">functions get_mars_data and prepare_flexpart. Otherwise it prepares</span> 194 <span class="sd">a job script (korn shell) which will do the necessary work on the</span> 195 <span class="sd">ECMWF server. This script will de submitted via the ecaccess command</span> 196 <span class="sd">ecaccess-job-submit.</span> 197 198 <span class="sd">This file can also be imported as a module which then contains the following</span> 199 <span class="sd">functions:</span> 200 201 <span class="sd"> * main - the main function of the script</span> 202 <span class="sd"> * submit - calls mk_jobscript depending on operation mode and submits its</span> 203 <span class="sd"> * mk_jobscript - creates the job script from a template</span> 204 205 <span class="sd">Type: submit.py --help</span> 206 <span class="sd">to get information about command line parameters.</span> 207 <span class="sd">Read the documentation for usage instructions.</span> 208 <span class="sd">'''</span> 194 209 195 210 <span class="c1"># ------------------------------------------------------------------------------</span> … … 201 216 <span class="kn">import</span> <span class="nn">inspect</span> 202 217 <span class="kn">import</span> <span class="nn">collections</span> 218 <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> 203 219 204 220 <span class="c1"># software specific classes and modules from flex_extract</span> 205 221 <span class="kn">import</span> <span class="nn">_config</span> 206 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_arg uments</span><span class="p">,</span>222 <span class="kn">from</span> <span class="nn">mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">normal_exit</span><span class="p">,</span> <span class="n">get_cmdline_args</span><span class="p">,</span> 207 223 <span class="n">submit_job_to_ecserver</span><span class="p">,</span> <span class="n">read_ecenv</span><span class="p">)</span> 208 224 <span class="kn">from</span> <span class="nn">mods.get_mars_data</span> <span class="k">import</span> <span class="n">get_mars_data</span> … … 211 227 212 228 <span class="c1"># ------------------------------------------------------------------------------</span> 213 <span class="c1"># FUNCTIONS</span>229 <span class="c1"># METHODS</span> 214 230 <span class="c1"># ------------------------------------------------------------------------------</span> 215 231 … … 228 244 <span class="sd"> '''</span> 229 245 230 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_arg uments</span><span class="p">()</span>246 <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> 231 247 <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> 232 248 … … 247 263 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">request</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> 248 264 <span class="n">prepare_flexpart</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">ppid</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> 249 <span class="n"> normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'FLEX_EXTRACT IS DONE!'</span><span class="p">)</span>265 <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT IS DONE!'</span> 250 266 <span class="k">else</span><span class="p">:</span> 251 <span class="n"> normal_exit</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mailfail</span><span class="p">,</span> <span class="s1">'PRINTING MARS_REQUESTS DONE!'</span><span class="p">)</span>252 <span class="c1"># send files to ECMWF server and install there</span>267 <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'PRINTING MARS_REQUESTS DONE!'</span> 268 <span class="c1"># send files to ECMWF server</span> 253 269 <span class="k">else</span><span class="p">:</span> 254 270 <span class="n">submit</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">job_template</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span> 271 <span class="n">exit_message</span> <span class="o">=</span> <span class="s1">'FLEX_EXTRACT JOB SCRIPT IS SUBMITED!'</span> 272 273 <span class="n">normal_exit</span><span class="p">(</span><span class="n">exit_message</span><span class="p">)</span> 255 274 256 275 <span class="k">return</span></div> 257 276 258 277 <div class="viewcode-block" id="submit"><a class="viewcode-back" href="../api.html#submit.submit">[docs]</a><span class="k">def</span> <span class="nf">submit</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">queue</span><span class="p">):</span> 259 <span class="sd">'''Prepares the job script and submit it to the specified queue.</span>278 <span class="sd">'''Prepares the job script and submits it to the specified queue.</span> 260 279 261 280 <span class="sd"> Parameters</span> 262 281 <span class="sd"> ----------</span> 263 <span class="sd"> jtemplate : :obj:`string`</span>282 <span class="sd"> jtemplate : str</span> 264 283 <span class="sd"> Job template file from sub-directory "_templates" for</span> 265 284 <span class="sd"> submission to ECMWF. It contains all necessary</span> … … 268 287 <span class="sd"> Default is "job.temp".</span> 269 288 270 <span class="sd"> c : :obj:`ControlFile`</span>289 <span class="sd"> c : ControlFile</span> 271 290 <span class="sd"> Contains all the parameters of CONTROL file and</span> 272 291 <span class="sd"> command line.</span> 273 292 274 <span class="sd"> queue : :obj:`string`</span>293 <span class="sd"> queue : str</span> 275 294 <span class="sd"> Name of queue for submission to ECMWF (e.g. ecgate or cca )</span> 276 295 … … 280 299 <span class="sd"> '''</span> 281 300 282 <span class="c1"># read template file and get index for CONTROL input</span>283 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">jtemplate</span><span class="p">))</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>284 <span class="n">lftext</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>285 <span class="n">insert_point</span> <span class="o">=</span> <span class="n">lftext</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'EOF'</span><span class="p">)</span>286 287 301 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">basetime</span><span class="p">:</span> 288 302 <span class="c1"># --------- create on demand job script ------------------------------------</span> 289 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n"> maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span>303 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">purefc</span><span class="p">:</span> 290 304 <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Pure forecast mode! ----'</span><span class="p">)</span> 291 305 <span class="k">else</span><span class="p">:</span> 292 306 <span class="nb">print</span><span class="p">(</span><span class="s1">'---- On-demand mode! ----'</span><span class="p">)</span> 307 293 308 <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> 294 <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">4</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'ksh'</span><span class="p">)</span> 295 <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> 296 297 <span class="n">lftextondemand</span> <span class="o">=</span> <span class="n">lftext</span><span class="p">[:</span><span class="n">insert_point</span><span class="p">]</span> <span class="o">+</span> <span class="n">clist</span> <span class="o">+</span> <span class="n">lftext</span><span class="p">[</span><span class="n">insert_point</span><span class="p">:]</span> 298 299 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 300 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lftextondemand</span><span class="p">))</span> 301 302 <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> 309 <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'.ksh'</span><span class="p">)</span> 310 311 <span class="c1"># divide time periode into specified number of job chunks</span> 312 <span class="c1"># to have multiple job scripts</span> 313 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">:</span> 314 <span class="n">start</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">start_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> 315 <span class="n">end</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">end_date</span><span class="p">,</span> <span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">'</span><span class="p">)</span> 316 <span class="n">chunk</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">job_chunk</span><span class="p">)</span> 317 318 <span class="k">while</span> <span class="n">start</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> 319 <span class="k">if</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span><span class="p">)</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span> 320 <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> 321 <span class="k">else</span><span class="p">:</span> 322 <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> 323 324 <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> 325 326 <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> 327 328 <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> 329 <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> 330 331 <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">chunk</span> 332 <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span> 333 <span class="c1"># submit a single job script</span> 334 <span class="k">else</span><span class="p">:</span> 335 <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> 336 337 <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> 338 339 <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> 340 <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> 303 341 304 342 <span class="k">else</span><span class="p">:</span> 305 343 <span class="c1"># --------- create operational job script ----------------------------------</span> 306 344 <span class="nb">print</span><span class="p">(</span><span class="s1">'---- Operational mode! ----'</span><span class="p">)</span> 345 307 346 <span class="n">job_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_JOBSCRIPTS</span><span class="p">,</span> 308 347 <span class="n">jtemplate</span><span class="p">[:</span><span class="o">-</span><span class="mi">5</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'oper.ksh'</span><span class="p">)</span> 309 310 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">:</span>311 <span class="n">mt</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">maxstep</span><span class="p">)</span>312 <span class="k">else</span><span class="p">:</span>313 <span class="n">mt</span> <span class="o">=</span> <span class="mi">0</span>314 348 315 349 <span class="n">c</span><span class="o">.</span><span class="n">start_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> 316 350 <span class="n">c</span><span class="o">.</span><span class="n">end_date</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_YEAR}</span><span class="s1">$</span><span class="si">{MSJ_MONTH}</span><span class="s1">$</span><span class="si">{MSJ_DAY}</span><span class="s1">'</span> 317 351 <span class="n">c</span><span class="o">.</span><span class="n">base_time</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> 318 <span class="k">if</span> <span class="n"> mt</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span>352 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">maxstep</span> <span class="o">></span> <span class="mi">24</span><span class="p">:</span> 319 353 <span class="n">c</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{MSJ_BASETIME}</span><span class="s1"> </span><span class="si">{MSJ_BASETIME}</span><span class="s1">'</span> 320 354 321 <span class="n">colist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> 322 323 <span class="n">lftextoper</span> <span class="o">=</span> <span class="n">lftext</span><span class="p">[:</span><span class="n">insert_point</span><span class="p">]</span> <span class="o">+</span> <span class="n">colist</span> <span class="o">+</span> <span class="n">lftext</span><span class="p">[</span><span class="n">insert_point</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:]</span> 324 355 <span class="n">clist</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">to_list</span><span class="p">()</span> 356 357 <span class="n">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">)</span> 358 359 <span class="n">job_id</span> <span class="o">=</span> <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span> 360 <span class="nb">print</span><span class="p">(</span><span class="s1">'The job id is: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">job_id</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> 361 362 <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email per job with subject flex.hostname.pid'</span><span class="p">)</span> 363 364 <span class="k">return</span></div> 365 366 <div class="viewcode-block" id="mk_jobscript"><a class="viewcode-back" href="../api.html#submit.mk_jobscript">[docs]</a><span class="k">def</span> <span class="nf">mk_jobscript</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> <span class="n">job_file</span><span class="p">,</span> <span class="n">clist</span><span class="p">):</span> 367 <span class="sd">'''Creates the job script from template.</span> 368 369 <span class="sd"> Parameters</span> 370 <span class="sd"> ----------</span> 371 <span class="sd"> jtemplate : str</span> 372 <span class="sd"> Job template file from sub-directory "_templates" for</span> 373 <span class="sd"> submission to ECMWF. It contains all necessary</span> 374 <span class="sd"> module and variable settings for the ECMWF environment as well as</span> 375 <span class="sd"> the job call and mail report instructions.</span> 376 <span class="sd"> Default is "job.temp".</span> 377 378 <span class="sd"> job_file : str</span> 379 <span class="sd"> Path to the job script file.</span> 380 381 <span class="sd"> clist : list of str</span> 382 <span class="sd"> Contains all necessary parameters for ECMWF CONTROL file.</span> 383 384 <span class="sd"> Return</span> 385 <span class="sd"> ------</span> 386 387 <span class="sd"> '''</span> 388 <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> 389 <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> 390 <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> 391 392 <span class="c1"># load template and insert control content as list</span> 393 <span class="k">try</span><span class="p">:</span> 394 <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> 395 <span class="n">control_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">jtemplate</span><span class="p">,</span> 396 <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span> 397 398 <span class="n">stream</span> <span class="o">=</span> <span class="n">control_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">control_content</span><span class="o">=</span><span class="n">clist</span><span class="p">)</span> 399 <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 400 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 401 402 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> 403 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 404 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 405 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 406 407 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to generate jobscript'</span><span class="p">)</span> 408 409 <span class="c1"># create jobscript file</span> 410 <span class="k">try</span><span class="p">:</span> 325 411 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">job_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 326 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class=" s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lftextoper</span><span class="p">))</span>327 328 <span class="n ">submit_job_to_ecserver</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">job_file</span><span class="p">)</span>329 330 <span class="c1"># --------------------------------------------------------------------------</span> 331 <span class="nb">print</span><span class="p">(</span><span class="s1">'You should get an email with subject flex.hostname.pid'</span><span class="p">)</span>412 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">'text'</span><span class="p">))</span> 413 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 414 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 415 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 416 417 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... error occured while trying to write '</span> <span class="o">+</span> <span class="n">job_file</span><span class="p">)</span> 332 418 333 419 <span class="k">return</span></div> 420 334 421 335 422 <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> … … 347 434 <div role="contentinfo"> 348 435 <p> 349 © Copyright 2018, Anne Philipp and Leopold Haimberger .436 © Copyright 2018, Anne Philipp and Leopold Haimberger 350 437 351 438 </p> … … 366 453 367 454 368 <script type="text/javascript"> 369 var DOCUMENTATION_OPTIONS = { 370 URL_ROOT:'../', 371 VERSION:'7.1 alpha', 372 LANGUAGE:'None', 373 COLLAPSE_INDEX:false, 374 FILE_SUFFIX:'.html', 375 HAS_SOURCE: true, 376 SOURCELINK_SUFFIX: '.txt' 377 }; 378 </script> 379 <script type="text/javascript" src="../_static/jquery.js"></script> 380 <script type="text/javascript" src="../_static/underscore.js"></script> 381 <script type="text/javascript" src="../_static/doctools.js"></script> 382 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 455 456 457 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 458 <script type="text/javascript" src="../_static/jquery.js"></script> 459 <script type="text/javascript" src="../_static/underscore.js"></script> 460 <script type="text/javascript" src="../_static/doctools.js"></script> 461 383 462 384 463 -
documentation/Sphinx/build/html/_modules/tools.html
r274f9ef r2625ca8 167 167 <span class="c1"># my_error, normal_exit, init128, to_param_id</span> 168 168 <span class="c1">#</span> 169 <span class="c1"># April 2018 - Anne Philipp (University of Vienna):</span>169 <span class="c1"># April - December 2018 - Anne Philipp (University of Vienna):</span> 170 170 <span class="c1"># - applied PEP8 style guide</span> 171 171 <span class="c1"># - added documentation</span> 172 <span class="c1"># - moved all functions from file Flexparttools to this file tools</span> 173 <span class="c1"># - added function get_list_as_string</span> 172 <span class="c1"># - moved all non class methods from former file Flexparttools in here</span> 174 173 <span class="c1"># - seperated args and control interpretation</span> 174 <span class="c1"># - added functions get_list_as_string, read_ecenv, send_mail, make_dir,</span> 175 <span class="c1"># put_file_to_ecserver, submit_job_to_ecserver, get_informations,</span> 176 <span class="c1"># get_dimensions, execute_subprocess, none_or_int, none_or_str</span> 175 177 <span class="c1">#</span> 176 178 <span class="c1"># @License:</span> 177 <span class="c1"># (C) Copyright 2014-2018.</span> 179 <span class="c1"># (C) Copyright 2014-2019.</span> 180 <span class="c1"># Anne Philipp, Leopold Haimberger</span> 178 181 <span class="c1">#</span> 179 <span class="c1"># This software is licensed under the terms of the Apache Licence Version 2.0</span> 180 <span class="c1"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span> 182 <span class="c1"># This work is licensed under the Creative Commons Attribution 4.0</span> 183 <span class="c1"># International License. To view a copy of this license, visit</span> 184 <span class="c1"># http://creativecommons.org/licenses/by/4.0/ or send a letter to</span> 185 <span class="c1"># Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span> 181 186 <span class="c1">#</span> 182 <span class="c1"># @Modul Description:</span> 183 <span class="c1"># This module contains a couple of helpful functions which are</span> 184 <span class="c1"># used in different places in flex_extract.</span> 185 <span class="c1">#</span> 186 <span class="c1"># @Module Content:</span> 187 <span class="c1"># - get_cmdline_arguments</span> 188 <span class="c1"># - clean_up</span> 189 <span class="c1"># - my_error</span> 190 <span class="c1"># - normal_exit</span> 191 <span class="c1"># - product</span> 192 <span class="c1"># - silent_remove</span> 193 <span class="c1"># - init128</span> 194 <span class="c1"># - to_param_id</span> 195 <span class="c1"># - get_list_as_string</span> 196 <span class="c1"># - make_dir</span> 197 <span class="c1">#</span> 187 <span class="c1"># @Methods:</span> 188 <span class="c1"># none_or_str</span> 189 <span class="c1"># none_or_int</span> 190 <span class="c1"># get_cmdline_args</span> 191 <span class="c1"># read_ecenv</span> 192 <span class="c1"># clean_up</span> 193 <span class="c1"># my_error</span> 194 <span class="c1"># send_mail</span> 195 <span class="c1"># normal_exit</span> 196 <span class="c1"># product</span> 197 <span class="c1"># silent_remove</span> 198 <span class="c1"># init128</span> 199 <span class="c1"># to_param_id</span> 200 <span class="c1"># get_list_as_string</span> 201 <span class="c1"># make_dir</span> 202 <span class="c1"># put_file_to_ecserver</span> 203 <span class="c1"># submit_job_to_ecserver</span> 204 <span class="c1"># get_informations</span> 205 <span class="c1"># get_dimensions</span> 206 <span class="c1"># execute_subprocess</span> 198 207 <span class="c1">#*******************************************************************************</span> 208 <span class="sd">'''This module contains a collection of diverse tasks within flex_extract.</span> 209 <span class="sd">'''</span> 199 210 200 211 <span class="c1"># ------------------------------------------------------------------------------</span> … … 207 218 <span class="kn">import</span> <span class="nn">subprocess</span> 208 219 <span class="kn">import</span> <span class="nn">traceback</span> 220 <span class="kn">import</span> <span class="nn">exceptions</span> 221 <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span> 209 222 <span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> 210 223 211 224 <span class="c1"># ------------------------------------------------------------------------------</span> 212 <span class="c1"># FUNCTIONS</span>225 <span class="c1"># METHODS</span> 213 226 <span class="c1"># ------------------------------------------------------------------------------</span> 214 227 … … 219 232 <span class="sd"> Parameters</span> 220 233 <span class="sd"> ----------</span> 221 <span class="sd"> value : :obj:`string`</span>234 <span class="sd"> value : str</span> 222 235 <span class="sd"> String to be checked for the "None" word.</span> 223 236 … … 238 251 <span class="sd"> Parameters</span> 239 252 <span class="sd"> ----------</span> 240 <span class="sd"> value : :obj:`string`</span>253 <span class="sd"> value : str</span> 241 254 <span class="sd"> String to be checked for the "None" word.</span> 242 255 … … 252 265 <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> 253 266 254 <div class="viewcode-block" id="get_cmdline_arg uments"><a class="viewcode-back" href="../api.html#tools.get_cmdline_arguments">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_arguments</span><span class="p">():</span>267 <div class="viewcode-block" id="get_cmdline_args"><a class="viewcode-back" href="../api.html#tools.get_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_args</span><span class="p">():</span> 255 268 <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> 256 269 <span class="sd"> Apply default values for non mentioned arguments.</span> … … 261 274 <span class="sd"> Return</span> 262 275 <span class="sd"> ------</span> 263 <span class="sd"> args : :obj:`Namespace`</span>276 <span class="sd"> args : Namespace</span> 264 277 <span class="sd"> Contains the commandline arguments from script/program call.</span> 265 278 <span class="sd"> '''</span> … … 269 282 <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> 270 283 271 <span class="c1"># the most important arguments</span>284 <span class="c1"># control parameters that override control file values</span> 272 285 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--start_date"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"start_date"</span><span class="p">,</span> 273 286 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> … … 279 292 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 280 293 <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved at once"</span><span class="p">)</span> 294 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--job_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"job_chunk"</span><span class="p">,</span> 295 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 296 <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved within a single job"</span><span class="p">)</span> 281 297 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--controlfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"controlfile"</span><span class="p">,</span> 282 298 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">'CONTROL.temp'</span><span class="p">,</span> 283 299 <span class="n">help</span><span class="o">=</span><span class="s2">"file with CONTROL parameters"</span><span class="p">)</span> 284 285 <span class="c1"># parameter for extra output information</span>286 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</span><span class="p">,</span>287 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>288 <span class="n">help</span><span class="o">=</span><span class="s2">"debug mode - leave temporary files intact"</span><span class="p">)</span>289 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</span><span class="p">,</span>290 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>291 <span class="n">help</span><span class="o">=</span><span class="s2">"list all mars request in file mars_requests.dat </span><span class="se">\</span>292 <span class="s2"> and skip submission to mars"</span><span class="p">)</span>293 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</span><span class="p">,</span>294 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>295 <span class="n">help</span><span class="o">=</span><span class="s2">"public mode - retrieves the public datasets"</span><span class="p">)</span>296 297 <span class="c1"># some arguments that override the default in the CONTROL file</span>298 300 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--basetime"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"basetime"</span><span class="p">,</span> 299 301 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> … … 309 311 <span class="n">help</span><span class="o">=</span><span class="s2">"area defined as north/west/south/east"</span><span class="p">)</span> 310 312 311 <span class="c1"># set the working directories</span> 313 <span class="c1"># some switches</span> 314 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</span><span class="p">,</span> 315 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 316 <span class="n">help</span><span class="o">=</span><span class="s2">"debug mode - leave temporary files intact"</span><span class="p">)</span> 317 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</span><span class="p">,</span> 318 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 319 <span class="n">help</span><span class="o">=</span><span class="s2">"list all mars requests in file mars_requests.dat"</span><span class="p">)</span> 320 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</span><span class="p">,</span> 321 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 322 <span class="n">help</span><span class="o">=</span><span class="s2">"public mode - retrieves the public datasets"</span><span class="p">)</span> 323 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--rrint"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"rrint"</span><span class="p">,</span> 324 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 325 <span class="n">help</span><span class="o">=</span><span class="s2">"select old or new precipitation interpolation </span><span class="se">\</span> 326 <span class="s2"> 0 - old method</span><span class="se">\</span> 327 <span class="s2"> 1 - new method (additional subgrid points)"</span><span class="p">)</span> 328 329 <span class="c1"># set directories</span> 312 330 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--inputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"inputdir"</span><span class="p">,</span> 313 331 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> … … 316 334 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 317 335 <span class="n">help</span><span class="o">=</span><span class="s2">"root directory for storing output files"</span><span class="p">)</span> 318 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpart _root_scripts"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpart_root_scripts"</span><span class="p">,</span>336 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--flexpartdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpartdir"</span><span class="p">,</span> 319 337 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 320 338 <span class="n">help</span><span class="o">=</span><span class="s2">"FLEXPART root directory (to find grib2flexpart </span><span class="se">\</span> … … 324 342 <span class="c1"># this is only used by prepare_flexpart.py to rerun a postprocessing step</span> 325 343 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ppid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ppid"</span><span class="p">,</span> 326 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_ int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>344 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 327 345 <span class="n">help</span><span class="o">=</span><span class="s2">"specify parent process id for </span><span class="se">\</span> 328 346 <span class="s2"> rerun of prepare_flexpart"</span><span class="p">)</span> … … 341 359 <span class="k">return</span> <span class="n">args</span></div> 342 360 343 <div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">file name</span><span class="p">):</span>361 <div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span> 344 362 <span class="sd">'''Reads the file into a dictionary where the key values are the parameter</span> 345 363 <span class="sd"> names.</span> … … 347 365 <span class="sd"> Parameters</span> 348 366 <span class="sd"> ----------</span> 349 <span class="sd"> file name : :obj:`string`</span>367 <span class="sd"> filepath : str</span> 350 368 <span class="sd"> Path to file where the ECMWF environment parameters are stored.</span> 351 369 352 370 <span class="sd"> Return</span> 353 371 <span class="sd"> ------</span> 354 <span class="sd"> envs : :obj:`dictionary`</span>372 <span class="sd"> envs : dict</span> 355 373 <span class="sd"> Contains the environment parameter ecuid, ecgid, gateway</span> 356 374 <span class="sd"> and destination for ECMWF server environments.</span> 357 375 <span class="sd"> '''</span> 358 376 <span class="n">envs</span><span class="o">=</span> <span class="p">{}</span> 359 360 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 361 <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> 362 <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> 363 <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> 377 <span class="k">try</span><span class="p">:</span> 378 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 379 <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> 380 <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> 381 <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> 382 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 383 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 384 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 385 386 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read ECMWF_ENV '</span> 387 <span class="s1">'file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> 364 388 365 389 <span class="k">return</span> <span class="n">envs</span></div> 366 390 367 391 <div class="viewcode-block" id="clean_up"><a class="viewcode-back" href="../api.html#tools.clean_up">[docs]</a><span class="k">def</span> <span class="nf">clean_up</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> 368 <span class="sd">'''Remove all files from intermediate directory (inputdir).</span> 369 370 <span class="sd"> Parameters</span> 371 <span class="sd"> ----------</span> 372 <span class="sd"> c : :obj:`ControlFile`</span> 392 <span class="sd">'''Remove files from the intermediate directory (inputdir).</span> 393 394 <span class="sd"> It keeps the final FLEXPART input files if program runs without</span> 395 <span class="sd"> ECMWF Api and keywords "ectrans" or "ecstorage" are set to "1".</span> 396 397 <span class="sd"> Parameters</span> 398 <span class="sd"> ----------</span> 399 <span class="sd"> c : ControlFile</span> 373 400 <span class="sd"> Contains all the parameters of CONTROL file and</span> 374 401 <span class="sd"> command line.</span> … … 379 406 <span class="sd"> '''</span> 380 407 381 <span class="nb">print</span><span class="p">(</span><span class="s2">"clean_up"</span><span class="p">)</span> 382 383 <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> <span class="s2">"/*"</span><span class="p">)</span> 384 <span class="k">for</span> <span class="n">clist</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span> 385 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">clist</span><span class="p">:</span> 386 <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span> 387 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="s1">'1'</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="s1">'1'</span><span class="p">):</span> 388 <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span> 389 390 <span class="nb">print</span><span class="p">(</span><span class="s2">"Done"</span><span class="p">)</span> 408 <span class="nb">print</span><span class="p">(</span><span class="s2">"... clean inputdir!"</span><span class="p">)</span> 409 410 <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span> 411 412 <span class="k">if</span> <span class="n">cleanlist</span><span class="p">:</span> 413 <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span> 414 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">element</span><span class="p">:</span> 415 <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> 416 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span> 417 <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> 418 <span class="nb">print</span><span class="p">(</span><span class="s2">"... done!"</span><span class="p">)</span> 419 <span class="k">else</span><span class="p">:</span> 420 <span class="nb">print</span><span class="p">(</span><span class="s2">"... nothing to clean!"</span><span class="p">)</span> 391 421 392 422 <span class="k">return</span></div> … … 399 429 <span class="sd"> Parameters</span> 400 430 <span class="sd"> ----------</span> 401 <span class="sd"> user : :obj:`list` of :obj:`string`</span>431 <span class="sd"> user : list of str</span> 402 432 <span class="sd"> Contains all email addresses which should be notified.</span> 403 433 <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> 404 434 <span class="sd"> mailing to the associated email address for this user.</span> 405 435 406 <span class="sd"> message : :obj:`string`, optional</span>436 <span class="sd"> message : str, optional</span> 407 437 <span class="sd"> Error message. Default value is "ERROR".</span> 408 438 … … 412 442 <span class="sd"> '''</span> 413 443 414 <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> 415 416 <span class="c1"># comment if user does not want email notification directly from python</span> 444 <span class="n">trace</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span> 445 <span class="n">full_message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">+</span> <span class="n">trace</span> 446 447 <span class="nb">print</span><span class="p">(</span><span class="n">full_message</span><span class="p">)</span> 448 449 <span class="n">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="s1">'ERROR'</span><span class="p">,</span> <span class="n">full_message</span><span class="p">)</span> 450 451 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 452 453 <span class="k">return</span></div> 454 455 456 <div class="viewcode-block" id="send_mail"><a class="viewcode-back" href="../api.html#tools.send_mail">[docs]</a><span class="k">def</span> <span class="nf">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">success_mode</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span> 457 <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> 458 459 <span class="sd"> Parameters</span> 460 <span class="sd"> ----------</span> 461 <span class="sd"> users : list of str</span> 462 <span class="sd"> Contains all email addresses which should be notified.</span> 463 <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> 464 <span class="sd"> mailing to the associated email address for this user.</span> 465 466 <span class="sd"> success_mode : str</span> 467 <span class="sd"> States the exit mode of the program to put into</span> 468 <span class="sd"> the mail subject line.</span> 469 470 <span class="sd"> message : str, optional</span> 471 <span class="sd"> Message for exiting program. Default value is "Done!".</span> 472 473 <span class="sd"> Return</span> 474 <span class="sd"> ------</span> 475 476 <span class="sd"> '''</span> 477 417 478 <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> 418 479 <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> 419 480 <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'USER'</span><span class="p">)</span> 420 481 <span class="k">try</span><span class="p">:</span> 421 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 ERROR'</span><span class="p">,</span>422 <span class="n"> os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span>482 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 '</span> <span class="o">+</span> 483 <span class="n">success_mode</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> 423 484 <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 424 485 <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 425 486 <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 426 487 <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 427 <span class="n">trace</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span> 428 <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">+</span> <span class="n">trace</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 488 <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 429 489 <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 430 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> 431 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'Email could not be sent!'</span><span class="p">)</span> 490 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 491 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> 492 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 493 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 494 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 495 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... Email could not be sent!'</span><span class="p">)</span> 432 496 <span class="k">else</span><span class="p">:</span> 433 <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> 434 <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> 435 436 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 497 <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">))</span> 437 498 438 499 <span class="k">return</span></div> 439 500 440 501 441 <div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n"> users</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s1">'Done!'</span><span class="p">):</span>502 <div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'Done!'</span><span class="p">):</span> 442 503 <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> 443 504 444 505 <span class="sd"> Parameters</span> 445 506 <span class="sd"> ----------</span> 446 <span class="sd"> user : :obj:`list` of :obj:`string`</span> 447 <span class="sd"> Contains all email addresses which should be notified.</span> 448 <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> 449 <span class="sd"> mailing to the associated email address for this user.</span> 450 451 <span class="sd"> message : :obj:`string`, optional</span> 507 <span class="sd"> message : str, optional</span> 452 508 <span class="sd"> Message for exiting program. Default value is "Done!".</span> 453 509 … … 456 512 457 513 <span class="sd"> '''</span> 458 <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> 459 460 <span class="c1"># comment if user does not want notification directly from python</span> 461 <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> 462 <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> 463 <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'USER'</span><span class="p">)</span> 464 <span class="k">try</span><span class="p">:</span> 465 <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 normal exit'</span><span class="p">,</span> 466 <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)],</span> 467 <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 468 <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 469 <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 470 <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> 471 <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span><span class="o">+</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 472 <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 473 <span class="nb">print</span><span class="p">(</span><span class="s1">'ERROR: '</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> 474 <span class="nb">print</span><span class="p">(</span><span class="s1">'Email could not be sent!'</span><span class="p">)</span> 475 <span class="k">else</span><span class="p">:</span> 476 <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> 477 <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span> 514 515 <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">))</span> 478 516 479 517 <span class="k">return</span></div> … … 481 519 482 520 <div class="viewcode-block" id="product"><a class="viewcode-back" href="../api.html#tools.product">[docs]</a><span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> 483 <span class="sd">'''This method combines the single characters of the passed arguments</span> 521 <span class="sd">'''Creates combinations of all passed arguments.</span> 522 523 <span class="sd"> This method combines the single characters of the passed arguments</span> 484 524 <span class="sd"> with each other. So that each character of each argument value</span> 485 525 <span class="sd"> will be combined with each character of the other arguments as a tuple.</span> … … 498 538 <span class="sd"> Parameters</span> 499 539 <span class="sd"> ----------</span> 500 <span class="sd"> \*args : :obj:`tuple`</span>540 <span class="sd"> \*args : list or str</span> 501 541 <span class="sd"> Positional arguments (arbitrary number).</span> 502 542 503 <span class="sd"> \*\*kwds : :obj:`dictionary`</span>543 <span class="sd"> \*\*kwds : dict</span> 504 544 <span class="sd"> Contains all the keyword arguments from \*args.</span> 505 545 … … 510 550 <span class="sd"> See example in description above.</span> 511 551 <span class="sd"> '''</span> 512 <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'repeat'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> 513 <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span> 514 <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span> 515 <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span> 516 <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> 517 <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span> 552 <span class="k">try</span><span class="p">:</span> 553 <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'repeat'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> 554 <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span> 555 <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span> 556 <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span> 557 <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> 558 <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span> 559 <span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 560 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... PRODUCT GENERATION FAILED!'</span><span class="p">)</span> 518 561 519 562 <span class="k">return</span></div> … … 526 569 <span class="sd"> Parameters</span> 527 570 <span class="sd"> ----------</span> 528 <span class="sd"> filename : :obj:`string`</span>571 <span class="sd"> filename : str</span> 529 572 <span class="sd"> The name of the file to be removed without notification.</span> 530 573 … … 536 579 <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> 537 580 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 538 <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span> 539 <span class="c1"># errno.ENOENT = no such file or directory</span> 581 <span class="c1"># errno.ENOENT = no such file or directory</span> 582 <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span> 583 <span class="k">pass</span> 584 <span class="k">else</span><span class="p">:</span> 540 585 <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> 541 586 … … 548 593 <span class="sd"> Parameters</span> 549 594 <span class="sd"> ----------</span> 550 <span class="sd"> filepath : :obj:`string`</span>595 <span class="sd"> filepath : str</span> 551 596 <span class="sd"> Path to file of ECMWF grib table number 128.</span> 552 597 553 598 <span class="sd"> Return</span> 554 599 <span class="sd"> ------</span> 555 <span class="sd"> table128 : :obj:`dictionary`</span>600 <span class="sd"> table128 : dict</span> 556 601 <span class="sd"> Contains the ECMWF grib table 128 information.</span> 557 602 <span class="sd"> The key is the parameter number and the value is the</span> … … 559 604 <span class="sd"> '''</span> 560 605 <span class="n">table128</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> 561 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 562 <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 563 <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> 564 <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'!'</span><span class="p">:</span> 565 <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> 606 <span class="k">try</span><span class="p">:</span> 607 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 608 <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> 609 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 610 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 611 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 612 613 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read parameter '</span> 614 <span class="s1">'table file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> 615 <span class="k">else</span><span class="p">:</span> 616 <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span> 617 <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'!'</span><span class="p">:</span> 618 <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> 566 619 567 620 <span class="k">return</span> <span class="n">table128</span></div> … … 573 626 <span class="sd"> Parameters</span> 574 627 <span class="sd"> ----------</span> 575 <span class="sd"> pars : :obj:`string`</span>628 <span class="sd"> pars : str</span> 576 629 <span class="sd"> Addpar argument from CONTROL file in the format of</span> 577 630 <span class="sd"> parameter names instead of ids. The parameter short</span> … … 579 632 <span class="sd"> one single string.</span> 580 633 581 <span class="sd"> table : :obj:`dictionary`</span>634 <span class="sd"> table : dict</span> 582 635 <span class="sd"> Contains the ECMWF grib table 128 information.</span> 583 636 <span class="sd"> The key is the parameter number and the value is the</span> … … 586 639 <span class="sd"> Return</span> 587 640 <span class="sd"> ------</span> 588 <span class="sd"> ipar : :obj:`list` of :obj:`integer`</span>641 <span class="sd"> ipar : list of int</span> 589 642 <span class="sd"> List of addpar parameters from CONTROL file transformed to</span> 590 643 <span class="sd"> parameter ids in the format of integer.</span> 591 644 <span class="sd"> '''</span> 645 <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span> 646 <span class="k">return</span> <span class="p">[]</span> 647 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> 648 <span class="n">pars</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">pars</span><span class="p">)</span> 649 592 650 <span class="n">cpar</span> <span class="o">=</span> <span class="n">pars</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> 593 651 <span class="n">ipar</span> <span class="o">=</span> <span class="p">[]</span> … … 607 665 <span class="sd"> Parameters</span> 608 666 <span class="sd"> ----------</span> 609 <span class="sd"> list_obj : :obj:`list`</span>667 <span class="sd"> list_obj : list of *</span> 610 668 <span class="sd"> A list with arbitrary content.</span> 611 669 612 <span class="sd"> concatenate_sign : :obj:`string`, optional</span>670 <span class="sd"> concatenate_sign : str, optional</span> 613 671 <span class="sd"> A string which is used to concatenate the single</span> 614 672 <span class="sd"> list elements. Default value is ", ".</span> … … 616 674 <span class="sd"> Return</span> 617 675 <span class="sd"> ------</span> 618 <span class="sd"> str_of_list : :obj:`string`</span>676 <span class="sd"> str_of_list : str</span> 619 677 <span class="sd"> The content of the list as a single string.</span> 620 678 <span class="sd"> '''</span> 621 679 680 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">list_obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> 681 <span class="n">list_obj</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">list_obj</span><span class="p">)</span> 622 682 <span class="n">str_of_list</span> <span class="o">=</span> <span class="n">concatenate_sign</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">list_obj</span><span class="p">)</span> 623 683 … … 625 685 626 686 <div class="viewcode-block" id="make_dir"><a class="viewcode-back" href="../api.html#tools.make_dir">[docs]</a><span class="k">def</span> <span class="nf">make_dir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span> 627 <span class="sd">'''Creates a directory and gives a warning if the directory</span> 628 <span class="sd"> already exists. The program stops only if there is another problem.</span> 629 630 <span class="sd"> Parameters</span> 631 <span class="sd"> ----------</span> 632 <span class="sd"> directory : :obj:`string`</span> 633 <span class="sd"> The directory name including the path which should be created.</span> 687 <span class="sd">'''Creates a directory.</span> 688 689 <span class="sd"> It gives a warning if the directory already exists and skips process.</span> 690 <span class="sd"> The program stops only if there is another problem.</span> 691 692 <span class="sd"> Parameters</span> 693 <span class="sd"> ----------</span> 694 <span class="sd"> directory : str</span> 695 <span class="sd"> The path to directory which should be created.</span> 634 696 635 697 <span class="sd"> Return</span> … … 640 702 <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span> 641 703 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 642 <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span> 643 <span class="c1"># errno.EEXIST = directory already exists</span> 704 <span class="c1"># errno.EEXIST = directory already exists</span> 705 <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span> 706 <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span> 707 <span class="k">else</span><span class="p">:</span> 644 708 <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> 645 <span class="k">else</span><span class="p">:</span>646 <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span>647 709 648 710 <span class="k">return</span></div> … … 659 721 <span class="sd"> Parameters</span> 660 722 <span class="sd"> ----------</span> 661 <span class="sd"> ecd : :obj:`string`</span>723 <span class="sd"> ecd : str</span> 662 724 <span class="sd"> The path were the file is stored.</span> 663 725 664 <span class="sd"> filename : :obj:`string`</span>726 <span class="sd"> filename : str</span> 665 727 <span class="sd"> The name of the file to send to the ECMWF server.</span> 666 728 667 <span class="sd"> target : :obj:`string`</span>729 <span class="sd"> target : str</span> 668 730 <span class="sd"> The target queue where the file should be sent to.</span> 669 731 670 <span class="sd"> ecuid : :obj:`string`</span>732 <span class="sd"> ecuid : str</span> 671 733 <span class="sd"> The user id on ECMWF server.</span> 672 734 673 <span class="sd"> ecgid : :obj:`string`</span>735 <span class="sd"> ecgid : str</span> 674 736 <span class="sd"> The group id on ECMWF server.</span> 675 737 676 738 <span class="sd"> Return</span> 677 739 <span class="sd"> ------</span> 678 <span class="sd"> rcode : :obj:`string`</span> 679 <span class="sd"> Resulting code of command execution. If successful the string</span> 680 <span class="sd"> will be empty.</span> 740 681 741 <span class="sd"> '''</span> 682 742 683 743 <span class="k">try</span><span class="p">:</span> 684 <span class="n"> rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span>685 686 687 688 689 744 <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span> 745 <span class="n">ecd</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span> 746 <span class="n">target</span> <span class="o">+</span> <span class="s1">':/home/ms/'</span> <span class="o">+</span> 747 <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span> 748 <span class="s1">'/'</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span> 749 <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> 690 750 <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 691 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: </span><span class="se">\n</span><span class="s1"> ...'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span>692 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ...'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>751 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> 752 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 693 753 694 754 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> 695 755 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> 696 697 <span class="k">return</span> <span class="n">rcode</span></div> 756 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 757 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 758 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 759 760 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> 761 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> 762 763 <span class="k">return</span></div> 698 764 699 765 <div class="viewcode-block" id="submit_job_to_ecserver"><a class="viewcode-back" href="../api.html#tools.submit_job_to_ecserver">[docs]</a><span class="k">def</span> <span class="nf">submit_job_to_ecserver</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">):</span> … … 708 774 <span class="sd"> Parameters</span> 709 775 <span class="sd"> ----------</span> 710 <span class="sd"> target : :obj:`string`</span>776 <span class="sd"> target : str</span> 711 777 <span class="sd"> The target where the file should be sent to, e.g. the queue.</span> 712 778 713 <span class="sd"> jobname : :obj:`string`</span>779 <span class="sd"> jobname : str</span> 714 780 <span class="sd"> The name of the jobfile to be submitted to the ECMWF server.</span> 715 781 716 782 <span class="sd"> Return</span> 717 783 <span class="sd"> ------</span> 718 <span class="sd"> rcode : :obj:`string`</span> 719 <span class="sd"> Resulting code of command execution. If successful the string</span> 720 <span class="sd"> will contain an integer number, representing the id of the job</span> 721 <span class="sd"> at the ecmwf server.</span> 784 <span class="sd"> job_id : int</span> 785 <span class="sd"> The id number of the job as a reference at the ecmwf server.</span> 722 786 <span class="sd"> '''</span> 723 787 724 788 <span class="k">try</span><span class="p">:</span> 725 <span class="n"> rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-job-submit'</span><span class="p">,</span>726 <span class="s1">'-queueName'</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span>727 <span class="n">jobname</span><span class="p">])</span> 789 <span class="n">job_id</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-job-submit'</span><span class="p">,</span> <span class="s1">'-queueName'</span><span class="p">,</span> 790 <span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">])</span> 791 728 792 <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 729 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> 730 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 731 793 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> 794 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 732 795 733 796 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> 734 797 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> 735 736 <span class="k">return</span> <span class="n">rcode</span></div> 798 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 799 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 800 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 801 802 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</span><span class="p">)</span> 803 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</span><span class="p">)</span> 804 805 <span class="k">return</span> <span class="n">job_id</span></div> 806 807 808 <div class="viewcode-block" id="get_informations"><a class="viewcode-back" href="../api.html#tools.get_informations">[docs]</a><span class="k">def</span> <span class="nf">get_informations</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> 809 <span class="sd">'''Gets basic information from an example grib file.</span> 810 811 <span class="sd"> These information are important for later use and the</span> 812 <span class="sd"> initialization of numpy arrays for data storing.</span> 813 814 <span class="sd"> Parameters</span> 815 <span class="sd"> ----------</span> 816 <span class="sd"> filename : str</span> 817 <span class="sd"> Name of the file which will be opened to extract basic information.</span> 818 819 <span class="sd"> Return</span> 820 <span class="sd"> ------</span> 821 <span class="sd"> data : dict</span> 822 <span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> 823 <span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> 824 <span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> 825 <span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> 826 <span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> 827 <span class="sd"> '''</span> 828 <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span> 829 830 <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span> 831 832 <span class="c1"># --- open file ---</span> 833 <span class="nb">print</span><span class="p">(</span><span class="s2">"Opening file for getting information data --- </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">filename</span><span class="p">)</span> 834 <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 835 <span class="c1"># load first message from file</span> 836 <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> 837 838 <span class="c1"># information needed from grib message</span> 839 <span class="n">keys</span> <span class="o">=</span> <span class="p">[</span> 840 <span class="s1">'Ni'</span><span class="p">,</span> 841 <span class="s1">'Nj'</span><span class="p">,</span> 842 <span class="s1">'latitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> 843 <span class="s1">'longitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> 844 <span class="s1">'latitudeOfLastGridPointInDegrees'</span><span class="p">,</span> 845 <span class="s1">'longitudeOfLastGridPointInDegrees'</span><span class="p">,</span> 846 <span class="s1">'jDirectionIncrementInDegrees'</span><span class="p">,</span> 847 <span class="s1">'iDirectionIncrementInDegrees'</span><span class="p">,</span> 848 <span class="s1">'missingValue'</span><span class="p">,</span> 849 <span class="p">]</span> 850 851 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Informations are: '</span><span class="p">)</span> 852 <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span> 853 <span class="c1"># Get the value of the key in a grib message.</span> 854 <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span><span class="n">key</span><span class="p">)</span> 855 <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> = </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]))</span> 856 857 <span class="c1"># Free the memory for the message referred as gribid.</span> 858 <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span> 859 860 <span class="k">return</span> <span class="n">data</span></div> 861 862 863 <div class="viewcode-block" id="get_dimensions"><a class="viewcode-back" href="../api.html#tools.get_dimensions">[docs]</a><span class="k">def</span> <span class="nf">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span> 864 <span class="sd">'''This function specifies the correct dimensions for x, y and t.</span> 865 866 <span class="sd"> Parameters</span> 867 <span class="sd"> ----------</span> 868 <span class="sd"> info : dict</span> 869 <span class="sd"> Contains basic informations of the ECMWF grib files, e.g.</span> 870 <span class="sd"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> 871 <span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> 872 <span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> 873 <span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> 874 875 <span class="sd"> purefc : int</span> 876 <span class="sd"> Switch for definition of pure forecast mode or not.</span> 877 878 <span class="sd"> dtime : str</span> 879 <span class="sd"> Time step in hours.</span> 880 881 <span class="sd"> index_vals : list of list of str</span> 882 <span class="sd"> Contains the values from the keys used for a distinct selection</span> 883 <span class="sd"> of grib messages in processing the grib files.</span> 884 <span class="sd"> Content looks like e.g.:</span> 885 <span class="sd"> index_vals[0]: ('20171106', '20171107', '20171108') ; date</span> 886 <span class="sd"> index_vals[1]: ('0', '1200', '1800', '600') ; time</span> 887 <span class="sd"> index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> 888 889 <span class="sd"> start_date : str</span> 890 <span class="sd"> The start date of the retrieval job.</span> 891 892 <span class="sd"> end_date : str</span> 893 <span class="sd"> The end date of the retrieval job.</span> 894 895 <span class="sd"> Return</span> 896 <span class="sd"> ------</span> 897 <span class="sd"> (ix, jy, it) : tuple of int</span> 898 <span class="sd"> Dimension in x-direction, y-direction and in time.</span> 899 <span class="sd"> '''</span> 900 901 <span class="n">ix</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Ni'</span><span class="p">]</span> 902 903 <span class="n">jy</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Nj'</span><span class="p">]</span> 904 905 <span class="k">if</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> 906 <span class="n">it</span> <span class="o">=</span> <span class="p">((</span><span class="n">end_date</span> <span class="o">-</span> <span class="n">start_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">24</span><span class="o">/</span><span class="nb">int</span><span class="p">(</span><span class="n">dtime</span><span class="p">)</span> 907 <span class="k">else</span><span class="p">:</span> 908 <span class="c1"># #no of step * #no of times * #no of days</span> 909 <span class="n">it</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> 910 911 <span class="k">return</span> <span class="p">(</span><span class="n">ix</span><span class="p">,</span> <span class="n">jy</span><span class="p">,</span> <span class="n">it</span><span class="p">)</span></div> 912 913 914 <div class="viewcode-block" id="execute_subprocess"><a class="viewcode-back" href="../api.html#tools.execute_subprocess">[docs]</a><span class="k">def</span> <span class="nf">execute_subprocess</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="s1">'SUBPROCESS FAILED!'</span><span class="p">):</span> 915 <span class="sd">'''Executes a command line instruction via a subprocess.</span> 916 917 <span class="sd"> Error handling is done if an error occures.</span> 918 919 <span class="sd"> Parameters</span> 920 <span class="sd"> ----------</span> 921 <span class="sd"> cmd_list : list of str</span> 922 <span class="sd"> A list of the components for the command line execution. Each</span> 923 <span class="sd"> list entry is a single part of the command which is seperated from</span> 924 <span class="sd"> the rest by a blank space.</span> 925 <span class="sd"> E.g. ['mv', file1, file2]</span> 926 927 <span class="sd"> Return</span> 928 <span class="sd"> ------</span> 929 <span class="sd"> error_msg : str, optional</span> 930 <span class="sd"> The possible error message if the subprocess failed.</span> 931 <span class="sd"> By default it will just tell "SUBPROCESS FAILED!".</span> 932 <span class="sd"> '''</span> 933 934 <span class="k">try</span><span class="p">:</span> 935 <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">)</span> 936 <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 937 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> 938 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 939 940 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> 941 <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> 942 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR CODE: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span> 943 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span> 944 945 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> 946 947 <span class="k">return</span></div> 737 948 </pre></div> 738 949 … … 747 958 <div role="contentinfo"> 748 959 <p> 749 © Copyright 2018, Anne Philipp and Leopold Haimberger .960 © Copyright 2018, Anne Philipp and Leopold Haimberger 750 961 751 962 </p> … … 766 977 767 978 768 <script type="text/javascript"> 769 var DOCUMENTATION_OPTIONS = { 770 URL_ROOT:'../', 771 VERSION:'7.1 alpha', 772 LANGUAGE:'None', 773 COLLAPSE_INDEX:false, 774 FILE_SUFFIX:'.html', 775 HAS_SOURCE: true, 776 SOURCELINK_SUFFIX: '.txt' 777 }; 778 </script> 779 <script type="text/javascript" src="../_static/jquery.js"></script> 780 <script type="text/javascript" src="../_static/underscore.js"></script> 781 <script type="text/javascript" src="../_static/doctools.js"></script> 782 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 979 980 981 <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> 982 <script type="text/javascript" src="../_static/jquery.js"></script> 983 <script type="text/javascript" src="../_static/underscore.js"></script> 984 <script type="text/javascript" src="../_static/doctools.js"></script> 985 783 986 784 987
Note: See TracChangeset
for help on using the changeset viewer.