Changeset 2625ca8 in flex_extract.git for documentation/Sphinx/build/html/_modules/EcFlexpart.html
- Timestamp:
- Jan 15, 2019, 1:03:37 AM (5 years ago)
- Branches:
- master, ctbto, dev
- Children:
- 6f951ca
- Parents:
- 0629ba8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.