source: flex_extract.git/Documentation/html/_modules/checks.html @ 6931f61

ctbtodev
Last change on this file since 6931f61 was 6931f61, checked in by anphi <anne.philipp@…>, 4 years ago

Update Onlinedocumentation after review of language editing

  • Property mode set to 100644
File size: 88.9 KB
Line 
1
2
3<!DOCTYPE html>
4<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
5<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
6<head>
7  <meta charset="utf-8">
8 
9  <meta name="viewport" content="width=device-width, initial-scale=1.0">
10 
11  <title>checks &mdash; flex_extract 7.1.2 documentation</title>
12 
13
14 
15 
16 
17 
18
19 
20  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
21 
22   
23      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
24        <script src="../_static/jquery.js"></script>
25        <script src="../_static/underscore.js"></script>
26        <script src="../_static/doctools.js"></script>
27        <script src="../_static/language_data.js"></script>
28        <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
29   
30    <script type="text/javascript" src="../_static/js/theme.js"></script>
31
32   
33
34 
35  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
36  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
37  <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" />
38  <link rel="stylesheet" href="../_static/css/theme_overrides.css" type="text/css" />
39    <link rel="index" title="Index" href="../genindex.html" />
40    <link rel="search" title="Search" href="../search.html" /> 
41</head>
42
43<body class="wy-body-for-nav">
44
45   
46  <div class="wy-grid-for-nav">
47   
48    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
49      <div class="wy-side-scroll">
50        <div class="wy-side-nav-search" >
51         
52
53         
54            <a href="../index.html" class="icon icon-home"> flex_extract
55         
56
57         
58          </a>
59
60         
61           
62           
63              <div class="version">
64                7.1.2
65              </div>
66           
67         
68
69         
70<div role="search">
71  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
72    <input type="text" name="q" placeholder="Search docs" />
73    <input type="hidden" name="check_keywords" value="yes" />
74    <input type="hidden" name="area" value="default" />
75  </form>
76</div>
77
78         
79        </div>
80
81        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
82         
83           
84           
85             
86           
87           
88              <p class="caption"><span class="caption-text">Table of Contents:</span></p>
89<ul>
90<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li>
91<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
92<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Usage</a></li>
93<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Code-Level Documentation</a></li>
94<li class="toctree-l1"><a class="reference internal" href="../evaluation.html">Evaluation</a></li>
95<li class="toctree-l1"><a class="reference internal" href="../dev_guide.html">Developer Guide</a></li>
96<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Changelog</a></li>
97<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li>
98<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li>
99<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li>
100</ul>
101
102           
103         
104        </div>
105      </div>
106    </nav>
107
108    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
109
110     
111      <nav class="wy-nav-top" aria-label="top navigation">
112       
113          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
114          <a href="../index.html">flex_extract</a>
115       
116      </nav>
117
118
119      <div class="wy-nav-content">
120       
121        <div class="rst-content">
122       
123         
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139<div role="navigation" aria-label="breadcrumbs navigation">
140
141  <ul class="wy-breadcrumbs">
142   
143      <li><a href="../index.html">Docs</a> &raquo;</li>
144       
145          <li><a href="index.html">Module code</a> &raquo;</li>
146       
147      <li>checks</li>
148   
149   
150      <li class="wy-breadcrumbs-aside">
151       
152      </li>
153   
154  </ul>
155
156 
157  <hr/>
158</div>
159          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
160           <div itemprop="articleBody">
161           
162  <h1>Source code for checks</h1><div class="highlight"><pre>
163<span></span><span class="ch">#!/usr/bin/env python3</span>
164<span class="c1"># -*- coding: utf-8 -*-</span>
165<span class="c1">#*******************************************************************************</span>
166<span class="c1"># @Author: Anne Philipp (University of Vienna)</span>
167<span class="c1">#</span>
168<span class="c1"># @Date: November 2018</span>
169<span class="c1">#</span>
170<span class="c1"># @Change History:</span>
171<span class="c1">#</span>
172<span class="c1"># @License:</span>
173<span class="c1">#    (C) Copyright 2014-2019.</span>
174<span class="c1">#    Anne Philipp, Leopold Haimberger</span>
175<span class="c1">#</span>
176<span class="c1">#    SPDX-License-Identifier: CC-BY-4.0</span>
177<span class="c1">#</span>
178<span class="c1">#    This work is licensed under the Creative Commons Attribution 4.0</span>
179<span class="c1">#    International License. To view a copy of this license, visit</span>
180<span class="c1">#    http://creativecommons.org/licenses/by/4.0/ or send a letter to</span>
181<span class="c1">#    Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span>
182<span class="c1">#*******************************************************************************</span>
183<span class="sd">&#39;&#39;&#39;This module contains check methods for the CONTROL paramaters.</span>
184<span class="sd">&#39;&#39;&#39;</span>
185
186<span class="c1"># ------------------------------------------------------------------------------</span>
187<span class="c1"># MODULES</span>
188<span class="c1"># ------------------------------------------------------------------------------</span>
189
190<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
191<span class="kn">import</span> <span class="nn">os</span>
192<span class="kn">import</span> <span class="nn">sys</span>
193<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
194<span class="c1"># pylint: disable=unused-import</span>
195<span class="k">try</span><span class="p">:</span>
196    <span class="kn">import</span> <span class="nn">exceptions</span>
197<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
198    <span class="kn">import</span> <span class="nn">builtins</span> <span class="k">as</span> <span class="nn">exceptions</span>
199<span class="c1"># pylint: enable=unused-import</span>
200
201<span class="c1"># software specific classes and modules from flex_extract</span>
202<span class="kn">import</span> <span class="nn">_config</span>
203<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">silent_remove</span>
204<span class="c1"># ------------------------------------------------------------------------------</span>
205<span class="c1"># FUNCTIONS</span>
206<span class="c1"># ------------------------------------------------------------------------------</span>
207
208<div class="viewcode-block" id="check_logicals_type"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_logicals_type">[docs]</a><span class="k">def</span> <span class="nf">check_logicals_type</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">logicals</span><span class="p">):</span>
209    <span class="sd">&#39;&#39;&#39;Check that the logical variables have correct type integer.</span>
210
211<span class="sd">    Parameters</span>
212<span class="sd">    ----------</span>
213<span class="sd">    c : ControlFile</span>
214<span class="sd">        Contains all the parameters of CONTROL file and</span>
215<span class="sd">        command line.</span>
216
217<span class="sd">    logicals : list of (str or int)</span>
218<span class="sd">        Names of the switches that are used to control the flow of the</span>
219<span class="sd">        program.</span>
220
221<span class="sd">    Return</span>
222<span class="sd">    ------</span>
223
224<span class="sd">    &#39;&#39;&#39;</span>
225
226    <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">logicals</span><span class="p">:</span>
227        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">),</span> <span class="nb">int</span><span class="p">):</span>
228            <span class="nb">setattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">var</span><span class="p">)))</span>
229
230    <span class="k">return</span></div>
231
232<div class="viewcode-block" id="check_grid"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_grid">[docs]</a><span class="k">def</span> <span class="nf">check_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">):</span>
233    <span class="sd">&#39;&#39;&#39;Convert grid into correct Lat/Lon format. E.g. &#39;0.5/0.5&#39;</span>
234
235<span class="sd">    Checks on format of original grid. Wether it is in the order of 1000 or 1.</span>
236<span class="sd">    Convert to correct grid format and substitute into &quot;Lat/Lon&quot; format string.</span>
237
238<span class="sd">    Parameters</span>
239<span class="sd">    ----------</span>
240<span class="sd">    grid : str</span>
241<span class="sd">        Contains grid information</span>
242
243<span class="sd">    Return</span>
244<span class="sd">    ------</span>
245<span class="sd">    grid : str</span>
246<span class="sd">        Contains grid in format Lat/lon. E.g. 0.1/0.1</span>
247<span class="sd">    &#39;&#39;&#39;</span>
248
249    <span class="k">if</span> <span class="s1">&#39;N&#39;</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
250        <span class="k">return</span> <span class="n">grid</span>
251    <span class="k">if</span> <span class="s1">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
252        <span class="n">gridx</span><span class="p">,</span> <span class="n">gridy</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">&#39;/&#39;</span><span class="p">)</span>
253        <span class="k">if</span> <span class="n">gridx</span> <span class="o">==</span> <span class="n">gridy</span><span class="p">:</span>
254            <span class="n">grid</span> <span class="o">=</span> <span class="n">gridx</span>
255        <span class="k">else</span><span class="p">:</span>
256            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;GRID parameter contains two &#39;</span>
257                             <span class="s1">&#39;different values: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="p">(</span><span class="n">grid</span><span class="p">))</span>
258    <span class="c1"># # determine grid format</span>
259    <span class="c1"># if float(grid) / 100. &gt;= 0.5:</span>
260    <span class="c1">#    # grid is defined in 1/1000 degrees; old format</span>
261    <span class="c1">#    grid = &#39;{}/{}&#39;.format(float(grid) / 1000.,</span>
262    <span class="c1">#                          float(grid) / 1000.)</span>
263    <span class="c1"># elif float(grid) / 100. &lt; 0.5:</span>
264    <span class="c1">#    # grid is defined in normal degree; new format</span>
265    <span class="c1">#    grid = &#39;{}/{}&#39;.format(float(grid), float(grid))</span>
266
267
268    <span class="c1"># determine grid format</span>
269    <span class="c1"># assumes that nobody wants grid spacings of 20 deg or more</span>
270    <span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mf">20.</span><span class="p">:</span>
271        <span class="c1"># grid is defined in 1/1000 degree; old format</span>
272        <span class="n">grid</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</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">float</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span>
273    <span class="k">else</span><span class="p">:</span>
274        <span class="c1"># grid is defined in degree; new format</span>
275        <span class="n">grid</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">),</span> <span class="nb">float</span><span class="p">(</span><span class="n">grid</span><span class="p">))</span>
276
277
278    <span class="k">return</span> <span class="n">grid</span></div>
279
280<div class="viewcode-block" id="check_area"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_area">[docs]</a><span class="k">def</span> <span class="nf">check_area</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">area</span><span class="p">,</span> <span class="n">upper</span><span class="p">,</span> <span class="n">lower</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">):</span>
281    <span class="sd">&#39;&#39;&#39;Defines the correct area string.</span>
282
283<span class="sd">    Checks the format of the four area components wether it is on</span>
284<span class="sd">    the order of 1000 or 1. </span>
285<span class="sd">    Also checks wether area was already set on command line, </span>
286<span class="sd">    then the four components are overwritten.</span>
287<span class="sd">    Convert to correct format of the order of magnitude &quot;1&quot; and sets the</span>
288<span class="sd">    area parameter (North/West/South/East).</span>
289<span class="sd">    E.g.: -5./20./10./10.</span>
290
291<span class="sd">    Parameters</span>
292<span class="sd">    ----------</span>
293<span class="sd">    grid : str</span>
294<span class="sd">        Contains grid information.</span>
295
296<span class="sd">    area : str</span>
297<span class="sd">        Contains area informtion.</span>
298
299<span class="sd">    upper : str</span>
300<span class="sd">        The northernmost latitude.</span>
301
302<span class="sd">    lower : str</span>
303<span class="sd">        The southernmost latitude.</span>
304
305<span class="sd">    left : str</span>
306<span class="sd">        The westernmost longitude.</span>
307
308<span class="sd">    right : str</span>
309<span class="sd">        The easternmost longitude.</span>
310
311<span class="sd">    Return</span>
312<span class="sd">    ------</span>
313<span class="sd">    grid : str</span>
314<span class="sd">        Contains grid in format lat/lon. E.g. 0.1/0.1</span>
315<span class="sd">    &#39;&#39;&#39;</span>
316    <span class="k">if</span> <span class="s1">&#39;N&#39;</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>  <span class="c1"># Gaussian output grid</span>
317        <span class="n">area</span> <span class="o">=</span> <span class="s1">&#39;G&#39;</span>
318        <span class="k">return</span> <span class="n">area</span>
319
320    <span class="c1"># if area was provided decompose area into its 4 components</span>
321    <span class="k">if</span> <span class="n">area</span><span class="p">:</span>
322        <span class="n">components</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">&#39;/&#39;</span><span class="p">)</span>
323        <span class="n">upper</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">lower</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">components</span>
324
325    <span class="c1"># determine area format</span>
326    <span class="k">if</span> <span class="nb">all</span><span class="p">([(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span>
327            <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span>
328            <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">),</span>
329            <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mf">0.01</span> <span class="ow">or</span> <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">)]):</span>
330        <span class="c1"># area is defined in 1/1000 degrees; old format</span>
331        <span class="n">area</span> <span class="o">=</span> <span class="s1">&#39;</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">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span>
332                                    <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span>
333                                    <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">,</span>
334                                    <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1000.</span><span class="p">)</span>
335    <span class="k">elif</span> <span class="nb">all</span><span class="p">([</span><span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.05</span><span class="p">,</span>
336              <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.05</span><span class="p">,</span>
337              <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.05</span><span class="p">,</span>
338              <span class="nb">abs</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">)</span> <span class="o">/</span> <span class="mf">10000.</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.05</span><span class="p">]):</span>
339        <span class="c1"># area is already in new format</span>
340        <span class="n">area</span> <span class="o">=</span> <span class="s1">&#39;</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">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">upper</span><span class="p">),</span>
341                                    <span class="nb">float</span><span class="p">(</span><span class="n">left</span><span class="p">),</span>
342                                    <span class="nb">float</span><span class="p">(</span><span class="n">lower</span><span class="p">),</span>
343                                    <span class="nb">float</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
344    <span class="k">else</span><span class="p">:</span>
345        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Area components have inconsisten or unrecognised &#39;</span>
346                         <span class="s1">&#39;formats (upper, lower, left, right): &#39;</span>
347                         <span class="s1">&#39;</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">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">upper</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">lower</span><span class="p">),</span>
348                                              <span class="nb">str</span><span class="p">(</span><span class="n">left</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">right</span><span class="p">)))</span>
349
350    <span class="k">return</span> <span class="n">area</span></div>
351
352<div class="viewcode-block" id="check_levels"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_levels">[docs]</a><span class="k">def</span> <span class="nf">check_levels</span><span class="p">(</span><span class="n">levelist</span><span class="p">,</span> <span class="n">level</span><span class="p">):</span>
353    <span class="sd">&#39;&#39;&#39;Defines correct level list and guarantees that the maximum level is</span>
354<span class="sd">    one of the available maximum levels.</span>
355
356<span class="sd">    Parameters</span>
357<span class="sd">    ----------</span>
358<span class="sd">    levelist : str</span>
359<span class="sd">        Specifies the level list.</span>
360<span class="sd">        Examples: model level: 1/to/137, pressure levels: 500/to/1000</span>
361
362<span class="sd">    level : str</span>
363<span class="sd">        Specifies the maximum level.</span>
364
365<span class="sd">    Return</span>
366<span class="sd">    ------</span>
367<span class="sd">    levelist : str</span>
368<span class="sd">        Specifies the required levels. It has to have a valid</span>
369<span class="sd">        correspondence to the selected levtype.</span>
370<span class="sd">        Examples: model level: 1/to/137, pressure levels: 500/to/1000</span>
371
372<span class="sd">    level : str</span>
373<span class="sd">        Specifies the maximum level. It has to be one of the</span>
374<span class="sd">        available maximum level numbers as contained in the variable</span>
375<span class="sd">        MAX_LEVEL_LIST in &quot;_config&quot;: [16, 19, 31, 40, 50, 60, 62, 91, 137]</span>
376
377<span class="sd">    &#39;&#39;&#39;</span>
378    <span class="c1"># assure consistency of levelist and level</span>
379    <span class="k">if</span> <span class="ow">not</span> <span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">level</span><span class="p">:</span>
380        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: neither levelist nor level &#39;</span>
381                         <span class="s1">&#39;specified in CONTROL file&#39;</span><span class="p">)</span>
382    <span class="k">elif</span> <span class="ow">not</span> <span class="n">levelist</span> <span class="ow">and</span> <span class="n">level</span><span class="p">:</span>
383        <span class="n">levelist</span> <span class="o">=</span> <span class="s1">&#39;1/to/&#39;</span> <span class="o">+</span> <span class="n">level</span>
384    <span class="k">elif</span> <span class="p">(</span><span class="n">levelist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">level</span><span class="p">)</span> <span class="ow">or</span> \
385         <span class="p">(</span><span class="n">levelist</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="n">level</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span>
386        <span class="n">level</span> <span class="o">=</span> <span class="n">levelist</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
387    <span class="k">else</span><span class="p">:</span>
388        <span class="k">pass</span>
389
390    <span class="c1"># check if max level is a valid level</span>
391    <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">level</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">MAX_LEVEL_LIST</span><span class="p">:</span>
392        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: </span><span class="se">\n</span><span class="s1">&#39;</span>
393                         <span class="s1">&#39;LEVEL must be the maximum level of a specified &#39;</span>
394                         <span class="s1">&#39;level list from ECMWF, e.g. </span><span class="si">{}</span><span class="s1"> </span><span class="se">\n</span><span class="s1">&#39;</span>
395                         <span class="s1">&#39;Check parameter &quot;LEVEL&quot; or the max level of &#39;</span>
396                         <span class="s1">&#39;&quot;LEVELIST&quot;!&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">MAX_LEVEL_LIST</span><span class="p">)))</span>
397
398    <span class="k">return</span> <span class="n">levelist</span><span class="p">,</span> <span class="n">level</span></div>
399
400
401<div class="viewcode-block" id="check_ppid"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_ppid">[docs]</a><span class="k">def</span> <span class="nf">check_ppid</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">ppid</span><span class="p">):</span>
402    <span class="sd">&#39;&#39;&#39;Sets the current PPID.</span>
403
404<span class="sd">    Parameters</span>
405<span class="sd">    ----------</span>
406<span class="sd">    c : ControlFile</span>
407<span class="sd">            Contains all the parameters of CONTROL file and</span>
408<span class="sd">            command line.</span>
409
410<span class="sd">    ppid : int or None</span>
411<span class="sd">        Contains the ppid number provided by the command line parameter</span>
412<span class="sd">        of is None otherwise.</span>
413
414<span class="sd">    Return</span>
415<span class="sd">    ------</span>
416
417<span class="sd">    &#39;&#39;&#39;</span>
418
419    <span class="k">if</span> <span class="ow">not</span> <span class="n">ppid</span><span class="p">:</span>
420        <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getppid</span><span class="p">())</span>
421    <span class="k">else</span><span class="p">:</span>
422        <span class="n">c</span><span class="o">.</span><span class="n">ppid</span> <span class="o">=</span> <span class="n">ppid</span>
423
424    <span class="k">return</span></div>
425
426
427<div class="viewcode-block" id="check_purefc"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_purefc">[docs]</a><span class="k">def</span> <span class="nf">check_purefc</span><span class="p">(</span><span class="n">ftype</span><span class="p">):</span>
428    <span class="sd">&#39;&#39;&#39;Check for a pure forecast mode.</span>
429
430<span class="sd">    Parameters</span>
431<span class="sd">    ----------</span>
432<span class="sd">    ftype : list of str</span>
433<span class="sd">        List of field types.</span>
434
435<span class="sd">    Return</span>
436<span class="sd">    ------</span>
437<span class="sd">    True or False:</span>
438<span class="sd">        True if pure forecasts are to be retrieved. False if there are</span>
439<span class="sd">        analysis fields in between.</span>
440<span class="sd">    &#39;&#39;&#39;</span>
441
442    <span class="k">if</span> <span class="s1">&#39;AN&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ftype</span> <span class="ow">and</span> <span class="s1">&#39;4V&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ftype</span><span class="p">:</span>
443        <span class="c1"># pure forecast</span>
444        <span class="k">return</span> <span class="mi">1</span>
445
446    <span class="k">return</span> <span class="mi">0</span></div>
447
448
449<div class="viewcode-block" id="check_step"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_step">[docs]</a><span class="k">def</span> <span class="nf">check_step</span><span class="p">(</span><span class="n">step</span><span class="p">):</span>
450    <span class="sd">&#39;&#39;&#39;Checks on step format and convert into a list of steps.</span>
451
452<span class="sd">    If the steps were defined with &quot;to&quot; and &quot;by&quot; they are converted into</span>
453<span class="sd">    a list of steps. If the steps were set in a string, it is</span>
454<span class="sd">    converted into a list.</span>
455
456<span class="sd">    Parameters</span>
457<span class="sd">    ----------</span>
458<span class="sd">    step : list of str or str</span>
459<span class="sd">        Specifies the forecast time step from forecast base time.</span>
460<span class="sd">        Valid values are hours (HH) from forecast base time.</span>
461
462<span class="sd">    Return</span>
463<span class="sd">    ------</span>
464<span class="sd">    step : list of str</span>
465<span class="sd">        List of forecast steps in format e.g. [001, 002, ...]</span>
466<span class="sd">    &#39;&#39;&#39;</span>
467    <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
468
469    <span class="k">if</span> <span class="s1">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">step</span><span class="p">:</span>
470        <span class="n">steps</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
471        <span class="k">if</span> <span class="s1">&#39;to&#39;</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">&#39;by&#39;</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
472            <span class="n">ilist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span>
473                              <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
474                              <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span>
475            <span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ilist</span><span class="p">]</span>
476        <span class="k">elif</span> <span class="s1">&#39;to&#39;</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">&#39;by&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">step</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
477            <span class="n">my_error</span><span class="p">(</span><span class="n">step</span> <span class="o">+</span> <span class="s1">&#39;:</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
478                     <span class="s1">&#39;if &quot;to&quot; is used in steps parameter, &#39;</span>
479                     <span class="s1">&#39;please use &quot;by&quot; as well&#39;</span><span class="p">)</span>
480        <span class="k">else</span><span class="p">:</span>
481            <span class="n">step</span> <span class="o">=</span> <span class="n">steps</span>
482
483    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
484        <span class="n">step</span> <span class="o">=</span> <span class="p">[</span><span class="n">step</span><span class="p">]</span>
485
486    <span class="k">return</span> <span class="n">step</span></div>
487
488<div class="viewcode-block" id="check_type"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_type">[docs]</a><span class="k">def</span> <span class="nf">check_type</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="n">steps</span><span class="p">):</span>
489    <span class="sd">&#39;&#39;&#39;Check if type variable is of type list and if analysis field has</span>
490<span class="sd">    forecast step 0.</span>
491
492<span class="sd">    Parameters</span>
493<span class="sd">    ----------</span>
494<span class="sd">    ftype : list of str or str</span>
495<span class="sd">        List of field types.</span>
496
497<span class="sd">    steps : str</span>
498<span class="sd">        Specifies the forecast time step from forecast base time.</span>
499<span class="sd">        Valid values are hours (HH) from forecast base time.</span>
500
501<span class="sd">    Return</span>
502<span class="sd">    ------</span>
503<span class="sd">    ftype : list of str</span>
504<span class="sd">        List of field types.</span>
505<span class="sd">    &#39;&#39;&#39;</span>
506    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ftype</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
507        <span class="n">ftype</span> <span class="o">=</span> <span class="p">[</span><span class="n">ftype</span><span class="p">]</span>
508
509    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ftype</span><span class="p">):</span>
510        <span class="k">if</span> <span class="n">ftype</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;AN&#39;</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
511            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;For analysis data, STEP = 0 is needed. Setting to 0 now.)&#39;</span><span class="p">)</span>
512            <span class="n">ftype</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
513
514    <span class="k">return</span> <span class="n">ftype</span></div>
515
516<div class="viewcode-block" id="check_time"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_time">[docs]</a><span class="k">def</span> <span class="nf">check_time</span><span class="p">(</span><span class="n">ftime</span><span class="p">):</span>
517    <span class="sd">&#39;&#39;&#39;Check if time variable is of type list. Otherwise convert to list.</span>
518
519<span class="sd">    Parameters</span>
520<span class="sd">    ----------</span>
521<span class="sd">    ftime : list of str or str</span>
522<span class="sd">        The time in hours of the field.</span>
523
524<span class="sd">    Return</span>
525<span class="sd">    ------</span>
526<span class="sd">    ftime : list of str</span>
527<span class="sd">        The time in hours of the field.</span>
528<span class="sd">    &#39;&#39;&#39;</span>
529    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ftime</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
530        <span class="n">ftime</span> <span class="o">=</span> <span class="p">[</span><span class="n">ftime</span><span class="p">]</span>
531
532    <span class="k">return</span> <span class="n">ftime</span></div>
533
534<div class="viewcode-block" id="check_len_type_time_step"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_len_type_time_step">[docs]</a><span class="k">def</span> <span class="nf">check_len_type_time_step</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">steps</span><span class="p">,</span> <span class="n">maxstep</span><span class="p">,</span> <span class="n">purefc</span><span class="p">):</span>
535    <span class="sd">&#39;&#39;&#39;Check if</span>
536
537<span class="sd">    Parameters</span>
538<span class="sd">    ----------</span>
539<span class="sd">    ftype : list of str</span>
540<span class="sd">        List of field types.</span>
541
542<span class="sd">    ftime : list of str or str</span>
543<span class="sd">        The time in hours of the field.</span>
544
545<span class="sd">    steps : str</span>
546<span class="sd">        Specifies the forecast time step from forecast base time.</span>
547<span class="sd">        Valid values are hours (HH) from forecast base time.</span>
548
549<span class="sd">    maxstep : int</span>
550<span class="sd">        The maximum forecast time step in hours from the forecast base time.</span>
551<span class="sd">        This is the maximum step for non-flux (not accumulated) forecast data.</span>
552
553<span class="sd">    purefc : int</span>
554<span class="sd">        Switch for definition of pure forecast mode or not.</span>
555
556<span class="sd">    Return</span>
557<span class="sd">    ------</span>
558<span class="sd">    ftype : list of str</span>
559<span class="sd">        List of field types.</span>
560
561<span class="sd">    ftime : list of str</span>
562<span class="sd">        The time in hours of the field.</span>
563
564<span class="sd">    steps : str</span>
565<span class="sd">        Specifies the forecast time step from forecast base time.</span>
566<span class="sd">        Valid values are hours (HH) from forecast base time.</span>
567<span class="sd">    &#39;&#39;&#39;</span>
568    <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftime</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span>
569        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: The number of field types, times and steps &#39;</span>
570                         <span class="s1">&#39;are not the same! Please check the settings in the &#39;</span>
571                         <span class="s1">&#39;CONTROL file!&#39;</span><span class="p">)</span>
572
573    <span class="c1"># if pure forecast is selected and only one field type/time is set</span>
574    <span class="c1"># prepare a complete list of type/time/step combination upto maxstep</span>
575    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">purefc</span><span class="p">:</span>
576        <span class="n">nftype</span> <span class="o">=</span> <span class="p">[]</span>
577        <span class="n">nsteps</span> <span class="o">=</span> <span class="p">[]</span>
578        <span class="n">nftime</span> <span class="o">=</span> <span class="p">[]</span>
579        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">maxstep</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
580            <span class="n">nftype</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
581            <span class="n">nsteps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
582            <span class="n">nftime</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ftime</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
583        <span class="k">return</span> <span class="n">nftype</span><span class="p">,</span> <span class="n">nftime</span><span class="p">,</span> <span class="n">nsteps</span>
584
585    <span class="k">return</span> <span class="n">ftype</span><span class="p">,</span> <span class="n">ftime</span><span class="p">,</span> <span class="n">steps</span></div>
586
587<div class="viewcode-block" id="check_mail"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_mail">[docs]</a><span class="k">def</span> <span class="nf">check_mail</span><span class="p">(</span><span class="n">mail</span><span class="p">):</span>
588    <span class="sd">&#39;&#39;&#39;Check the string of mail addresses, separate them and convert to list.</span>
589
590<span class="sd">    Parameters</span>
591<span class="sd">    ----------</span>
592<span class="sd">    mail : list of str or str</span>
593<span class="sd">        Contains email addresses for notifications.</span>
594<span class="sd">        It might also contain just the ecmwf user name which will trigger</span>
595<span class="sd">        mailing to the associated email address for this user.</span>
596
597<span class="sd">    Return</span>
598<span class="sd">    ------</span>
599<span class="sd">    mail : list of str</span>
600<span class="sd">        Contains email addresses for notifications.</span>
601<span class="sd">        It might also contain just the ecmwf user name which will trigger</span>
602<span class="sd">        mailing to the associated email address for this user.</span>
603
604<span class="sd">    &#39;&#39;&#39;</span>
605    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mail</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
606        <span class="k">if</span> <span class="s1">&#39;,&#39;</span> <span class="ow">in</span> <span class="n">mail</span><span class="p">:</span>
607            <span class="n">mail</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
608        <span class="k">elif</span> <span class="s1">&#39; &#39;</span> <span class="ow">in</span> <span class="n">mail</span><span class="p">:</span>
609            <span class="n">mail</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
610        <span class="k">else</span><span class="p">:</span>
611            <span class="n">mail</span> <span class="o">=</span> <span class="p">[</span><span class="n">mail</span><span class="p">]</span>
612
613    <span class="k">return</span> <span class="n">mail</span></div>
614
615<div class="viewcode-block" id="check_queue"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_queue">[docs]</a><span class="k">def</span> <span class="nf">check_queue</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">gateway</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">):</span>
616    <span class="sd">&#39;&#39;&#39;Check if the necessary ECMWF parameters are set if the queue is</span>
617<span class="sd">    one of the QUEUES_LIST (in _config).</span>
618
619<span class="sd">    Parameters</span>
620<span class="sd">    ----------</span>
621<span class="sd">    queue : str</span>
622<span class="sd">        Name of the queue if submitted to the ECMWF servers.</span>
623<span class="sd">        Used to check if ecuid, ecgid, gateway and destination</span>
624<span class="sd">        are set correctly and are not empty.</span>
625
626<span class="sd">    gateway : str</span>
627<span class="sd">        The address of the gateway server.</span>
628
629<span class="sd">    destination : str</span>
630<span class="sd">        The name of the destination of the gateway server for data</span>
631<span class="sd">        transfer through ectrans. E.g. name@genericSftp</span>
632
633<span class="sd">    ecuid : str</span>
634<span class="sd">        ECMWF user id.</span>
635
636<span class="sd">    ecgid : str</span>
637<span class="sd">        ECMWF group id.</span>
638
639<span class="sd">    Return</span>
640<span class="sd">    ------</span>
641
642<span class="sd">    &#39;&#39;&#39;</span>
643    <span class="k">if</span> <span class="n">queue</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">QUEUES_LIST</span> <span class="ow">and</span> \
644            <span class="p">(</span><span class="ow">not</span> <span class="n">ecuid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">ecgid</span><span class="p">):</span>
645        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Environment variables ECUID &#39;</span>
646                         <span class="s1">&#39;and ECGID were not set properly! </span><span class="se">\n</span><span class="s1"> &#39;</span>
647                         <span class="s1">&#39;Please check for existence of file &quot;ECMWF_ENV&quot; &#39;</span>
648                         <span class="s1">&#39;in the run directory!&#39;</span><span class="p">)</span>
649    <span class="k">elif</span> <span class="n">queue</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">QUEUES_LIST</span> <span class="ow">and</span> \
650             <span class="p">(</span><span class="ow">not</span> <span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">destination</span><span class="p">):</span>
651        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: Parameters GATEWAY and DESTINATION were &#39;</span>
652              <span class="s1">&#39;not properly set for working on ECMWF server. </span><span class="se">\n</span><span class="s1">&#39;</span>
653              <span class="s1">&#39;There will be no transfer of output files to the &#39;</span>
654              <span class="s1">&#39;local gateway server possible!&#39;</span><span class="p">)</span>
655    <span class="k">return</span></div>
656
657<div class="viewcode-block" id="check_pathes"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_pathes">[docs]</a><span class="k">def</span> <span class="nf">check_pathes</span><span class="p">(</span><span class="n">idir</span><span class="p">,</span> <span class="n">odir</span><span class="p">,</span> <span class="n">fpdir</span><span class="p">,</span> <span class="n">fedir</span><span class="p">):</span>
658    <span class="sd">&#39;&#39;&#39;Check if output and flexpart pathes are set.</span>
659
660<span class="sd">    Parameters</span>
661<span class="sd">    ----------</span>
662<span class="sd">    idir : str</span>
663<span class="sd">        Path to the temporary directory for MARS retrieval data.</span>
664
665<span class="sd">    odir : str</span>
666<span class="sd">        Path to the final output directory where the FLEXPART input files</span>
667<span class="sd">        will be stored.</span>
668
669<span class="sd">    fpdir : str</span>
670<span class="sd">        Path to FLEXPART root directory.</span>
671
672<span class="sd">    fedir : str</span>
673<span class="sd">        Path to flex_extract root directory.</span>
674
675<span class="sd">    Return</span>
676<span class="sd">    ------</span>
677<span class="sd">    odir : str</span>
678<span class="sd">        Path to the final output directory where the FLEXPART input files</span>
679<span class="sd">        will be stored.</span>
680
681<span class="sd">    fpdir : str</span>
682<span class="sd">        Path to FLEXPART root directory.</span>
683
684<span class="sd">    &#39;&#39;&#39;</span>
685    <span class="k">if</span> <span class="ow">not</span> <span class="n">fpdir</span><span class="p">:</span>
686        <span class="n">fpdir</span> <span class="o">=</span> <span class="n">fedir</span>
687
688    <span class="k">if</span> <span class="ow">not</span> <span class="n">odir</span><span class="p">:</span>
689        <span class="n">odir</span> <span class="o">=</span> <span class="n">idir</span>
690
691    <span class="k">return</span> <span class="n">odir</span><span class="p">,</span> <span class="n">fpdir</span></div>
692
693<div class="viewcode-block" id="check_dates"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_dates">[docs]</a><span class="k">def</span> <span class="nf">check_dates</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
694    <span class="sd">&#39;&#39;&#39;Checks if there is at least a start date for a one-day retrieval.</span>
695
696<span class="sd">    Checks if end date lies after start date and end date is set.</span>
697
698<span class="sd">    Parameters</span>
699<span class="sd">    ----------</span>
700<span class="sd">    start : str</span>
701<span class="sd">        The start date of the retrieval job.</span>
702
703<span class="sd">    end : str</span>
704<span class="sd">        The end date of the retrieval job.</span>
705
706<span class="sd">    Return</span>
707<span class="sd">    ------</span>
708<span class="sd">    start : str</span>
709<span class="sd">        The start date of the retrieval job.</span>
710
711<span class="sd">    end : str</span>
712<span class="sd">        The end date of the retrieval job.</span>
713
714<span class="sd">    &#39;&#39;&#39;</span>
715    <span class="c1"># check for having at least a starting date</span>
716    <span class="c1"># otherwise program is not allowed to run</span>
717    <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
718        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;start_date was neither specified in command line nor &#39;</span>
719                         <span class="s1">&#39;in CONTROL file.</span><span class="se">\n</span><span class="s1">&#39;</span>
720                         <span class="s1">&#39;Try &quot;</span><span class="si">{}</span><span class="s1"> -h&quot; to print usage information&#39;</span>
721                         <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
722
723    <span class="c1"># retrieve just one day if end_date isn&#39;t set</span>
724    <span class="k">if</span> <span class="ow">not</span> <span class="n">end</span><span class="p">:</span>
725        <span class="n">end</span> <span class="o">=</span> <span class="n">start</span>
726
727    <span class="n">dstart</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">start</span><span class="p">,</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
728    <span class="n">dend</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">end</span><span class="p">,</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
729    <span class="k">if</span> <span class="n">dstart</span> <span class="o">&gt;</span> <span class="n">dend</span><span class="p">:</span>
730        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Start date is after end date! </span><span class="se">\n</span><span class="s1">&#39;</span>
731                         <span class="s1">&#39;Please adapt the dates in CONTROL file or &#39;</span>
732                         <span class="s1">&#39;command line! (start=</span><span class="si">{}</span><span class="s1">; end=</span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
733
734    <span class="k">return</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span></div>
735
736<div class="viewcode-block" id="check_maxstep"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_maxstep">[docs]</a><span class="k">def</span> <span class="nf">check_maxstep</span><span class="p">(</span><span class="n">maxstep</span><span class="p">,</span> <span class="n">steps</span><span class="p">):</span>
737    <span class="sd">&#39;&#39;&#39;Convert maxstep into integer if it is already given. Otherwise, select</span>
738<span class="sd">    maxstep by going through the steps list.</span>
739
740<span class="sd">    Parameters</span>
741<span class="sd">    ----------</span>
742<span class="sd">    maxstep : str</span>
743<span class="sd">        The maximum forecast time step in hours from the forecast base time.</span>
744<span class="sd">        This is the maximum step for non flux (accumulated) forecast data.</span>
745
746<span class="sd">    steps : str</span>
747<span class="sd">        Specifies the forecast time step from forecast base time.</span>
748<span class="sd">        Valid values are hours (HH) from forecast base time.</span>
749
750<span class="sd">    Return</span>
751<span class="sd">    ------</span>
752<span class="sd">    maxstep : int</span>
753<span class="sd">        The maximum forecast time step in hours from the forecast base time.</span>
754<span class="sd">        This is the maximum step for non flux (accumulated) forecast data.</span>
755
756<span class="sd">    &#39;&#39;&#39;</span>
757    <span class="c1"># if maxstep wasn&#39;t provided</span>
758    <span class="c1"># search for it in the &quot;step&quot; parameter</span>
759    <span class="k">if</span> <span class="ow">not</span> <span class="n">maxstep</span><span class="p">:</span>
760        <span class="n">maxstep</span> <span class="o">=</span> <span class="mi">0</span>
761        <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">steps</span><span class="p">:</span>
762            <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">maxstep</span><span class="p">:</span>
763                <span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
764    <span class="k">else</span><span class="p">:</span>
765        <span class="n">maxstep</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">maxstep</span><span class="p">)</span>
766
767    <span class="k">return</span> <span class="n">maxstep</span></div>
768
769<div class="viewcode-block" id="check_basetime"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_basetime">[docs]</a><span class="k">def</span> <span class="nf">check_basetime</span><span class="p">(</span><span class="n">basetime</span><span class="p">):</span>
770    <span class="sd">&#39;&#39;&#39;Check if basetime is set and contains one of the two</span>
771<span class="sd">    possible values (0, 12).</span>
772
773<span class="sd">    Parameters</span>
774<span class="sd">    ----------</span>
775<span class="sd">    basetime : int or str or None</span>
776<span class="sd">        The time for a half day retrieval. The 12 hours upfront are to be</span>
777<span class="sd">        retrieved.</span>
778
779<span class="sd">    Return</span>
780<span class="sd">    ------</span>
781<span class="sd">    basetime : int or None</span>
782<span class="sd">        The time for a half day retrieval. The 12 hours upfront are to be</span>
783<span class="sd">        retrieved.</span>
784<span class="sd">    &#39;&#39;&#39;</span>
785    <span class="k">if</span> <span class="n">basetime</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
786        <span class="n">basetime</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">basetime</span><span class="p">)</span>
787        <span class="k">if</span> <span class="n">basetime</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">basetime</span> <span class="o">!=</span> <span class="mi">12</span><span class="p">:</span>
788            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Basetime has an invalid value &#39;</span>
789                             <span class="s1">&#39;-&gt; </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">basetime</span><span class="p">)))</span>
790    <span class="k">return</span> <span class="n">basetime</span></div>
791
792<div class="viewcode-block" id="check_request"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_request">[docs]</a><span class="k">def</span> <span class="nf">check_request</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">marsfile</span><span class="p">):</span>
793    <span class="sd">&#39;&#39;&#39;Check if there is an old MARS request file; if so, remove it.</span>
794
795<span class="sd">    Parameters</span>
796<span class="sd">    ----------</span>
797<span class="sd">    request : int</span>
798<span class="sd">        Selects the mode of retrieval.</span>
799<span class="sd">        0: Retrieves the data from ECMWF.</span>
800<span class="sd">        1: Prints the mars requests to an output file.</span>
801<span class="sd">        2: Retrieves the data and prints the mars request.</span>
802
803<span class="sd">    marsfile : str</span>
804<span class="sd">        Path to the mars request file.</span>
805
806<span class="sd">    Return</span>
807<span class="sd">    ------</span>
808
809<span class="sd">    &#39;&#39;&#39;</span>
810    <span class="k">if</span> <span class="n">request</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
811        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">marsfile</span><span class="p">):</span>
812            <span class="n">silent_remove</span><span class="p">(</span><span class="n">marsfile</span><span class="p">)</span>
813    <span class="k">return</span></div>
814
815<div class="viewcode-block" id="check_public"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_public">[docs]</a><span class="k">def</span> <span class="nf">check_public</span><span class="p">(</span><span class="n">public</span><span class="p">,</span> <span class="n">dataset</span><span class="p">):</span>
816    <span class="sd">&#39;&#39;&#39;Check wether the dataset parameter is set to a</span>
817<span class="sd">    public data set.</span>
818
819<span class="sd">    Parameters</span>
820<span class="sd">    ----------</span>
821<span class="sd">    public : int</span>
822<span class="sd">        Specifies if public data are to be retrieved or not.</span>
823
824<span class="sd">    dataset : str</span>
825<span class="sd">        Specific name which identifies the public dataset.</span>
826
827<span class="sd">    Return</span>
828<span class="sd">    ------</span>
829
830<span class="sd">    &#39;&#39;&#39;</span>
831    <span class="k">if</span> <span class="n">public</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dataset</span><span class="p">:</span>
832        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: If public MARS data are to be retrieved, &#39;</span>
833                         <span class="s1">&#39;the &quot;dataset&quot;-parameter has to be set, too!&#39;</span><span class="p">)</span>
834    <span class="k">return</span></div>
835
836<div class="viewcode-block" id="check_acctype"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_acctype">[docs]</a><span class="k">def</span> <span class="nf">check_acctype</span><span class="p">(</span><span class="n">acctype</span><span class="p">,</span> <span class="n">ftype</span><span class="p">):</span>
837    <span class="sd">&#39;&#39;&#39;Guarantees that the accumulation field type is set.</span>
838
839<span class="sd">    If not set, it is derived with the old method (TYPE[1]).</span>
840
841<span class="sd">    Parameters</span>
842<span class="sd">    ----------</span>
843<span class="sd">    acctype : str</span>
844<span class="sd">        The field type for the accumulated forecast fields.</span>
845
846<span class="sd">    ftype : list of str</span>
847<span class="sd">        List of field types.</span>
848
849<span class="sd">    Return</span>
850<span class="sd">    ------</span>
851<span class="sd">    acctype : str</span>
852<span class="sd">        The field type for the accumulated forecast fields.</span>
853<span class="sd">    &#39;&#39;&#39;</span>
854    <span class="k">if</span> <span class="ow">not</span> <span class="n">acctype</span><span class="p">:</span>
855        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Control parameter ACCTYPE was not defined.&#39;</span><span class="p">)</span>
856        <span class="k">try</span><span class="p">:</span>
857            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;AN&#39;</span><span class="p">:</span>
858                <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Use same field type as for the non-flux fields.&#39;</span><span class="p">)</span>
859                <span class="n">acctype</span> <span class="o">=</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
860            <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">ftype</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;AN&#39;</span><span class="p">:</span>
861                <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Use old setting by using TYPE[1] for flux forecast!&#39;</span><span class="p">)</span>
862                <span class="n">acctype</span> <span class="o">=</span> <span class="n">ftype</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
863        <span class="k">except</span><span class="p">:</span>
864            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Accumulation field type could not be set!&#39;</span><span class="p">)</span>
865    <span class="k">else</span><span class="p">:</span>
866        <span class="k">if</span> <span class="n">acctype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;AN&#39;</span><span class="p">:</span>
867            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Accumulation forecast fields can not be &#39;</span>
868                             <span class="s1">&#39;of type &quot;analysis&quot;!&#39;</span><span class="p">)</span>
869    <span class="k">return</span> <span class="n">acctype</span></div>
870
871
872<div class="viewcode-block" id="check_acctime"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_acctime">[docs]</a><span class="k">def</span> <span class="nf">check_acctime</span><span class="p">(</span><span class="n">acctime</span><span class="p">,</span> <span class="n">marsclass</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
873    <span class="sd">&#39;&#39;&#39;Guarantees that the accumulation forecast times were set.</span>
874
875<span class="sd">    If not set, setting the value to some of the most commonly used data sets</span>
876<span class="sd">    is attempted. Otherwise, an eror is raised.</span>
877
878<span class="sd">    Parameters</span>
879<span class="sd">    ----------</span>
880<span class="sd">    acctime : str</span>
881<span class="sd">        The starting time for the accumulated forecasts.</span>
882
883<span class="sd">    marsclass : str</span>
884<span class="sd">        ECMWF data classification identifier.</span>
885
886<span class="sd">    purefc : int</span>
887<span class="sd">        Switch for definition of pure forecast mode or not.</span>
888
889<span class="sd">    Return</span>
890<span class="sd">    ------</span>
891<span class="sd">    acctime : str</span>
892<span class="sd">        The starting time for the accumulated forecasts.</span>
893<span class="sd">    &#39;&#39;&#39;</span>
894
895    <span class="k">if</span> <span class="ow">not</span> <span class="n">acctime</span><span class="p">:</span>
896        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Control parameter ACCTIME was not set.&#39;</span><span class="p">)</span>
897        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Value will be set depending on field type:</span><span class="se">\n</span><span class="s1"> &#39;</span>
898              <span class="s1">&#39;</span><span class="se">\t\t</span><span class="s1"> EA=06/18</span><span class="se">\n\t\t</span><span class="s1"> EI/OD=00/12</span><span class="se">\n\t\t</span><span class="s1"> EP=18&#39;</span><span class="p">)</span>
899        <span class="k">if</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">&#39;EA&#39;</span><span class="p">:</span> <span class="c1"># Era 5</span>
900            <span class="n">acctime</span> <span class="o">=</span> <span class="s1">&#39;06/18&#39;</span>
901        <span class="k">elif</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">&#39;EI&#39;</span><span class="p">:</span> <span class="c1"># Era-Interim</span>
902            <span class="n">acctime</span> <span class="o">=</span> <span class="s1">&#39;00/12&#39;</span>
903        <span class="k">elif</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">&#39;EP&#39;</span><span class="p">:</span> <span class="c1"># CERA</span>
904            <span class="n">acctime</span> <span class="o">=</span> <span class="s1">&#39;18&#39;</span>
905        <span class="k">elif</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">&#39;OD&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span> <span class="c1"># On-demand</span>
906            <span class="n">acctime</span> <span class="o">=</span> <span class="s1">&#39;00/12&#39;</span>
907        <span class="k">elif</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">&#39;OD&#39;</span> <span class="ow">and</span> <span class="n">purefc</span><span class="p">:</span> <span class="c1"># On-demand</span>
908            <span class="n">acctime</span> <span class="o">=</span> <span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
909        <span class="k">else</span><span class="p">:</span>
910            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Accumulation forecast time can not be&#39;</span>
911                             <span class="s1">&#39;derived automatically!&#39;</span><span class="p">)</span>
912    <span class="k">return</span> <span class="n">acctime</span></div>
913
914<div class="viewcode-block" id="check_accmaxstep"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_accmaxstep">[docs]</a><span class="k">def</span> <span class="nf">check_accmaxstep</span><span class="p">(</span><span class="n">accmaxstep</span><span class="p">,</span> <span class="n">marsclass</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">maxstep</span><span class="p">):</span>
915    <span class="sd">&#39;&#39;&#39;Guarantees that the accumulation forecast step was set.</span>
916
917<span class="sd">    Parameters</span>
918<span class="sd">    ----------</span>
919<span class="sd">    accmaxstep : str</span>
920<span class="sd">        The maximum forecast step for the accumulated forecast fields.</span>
921
922<span class="sd">    marsclass : str</span>
923<span class="sd">        ECMWF data classification identifier.</span>
924
925<span class="sd">    purefc : int</span>
926<span class="sd">        Switch for definition of pure forecast mode or not.</span>
927
928<span class="sd">    maxstep : str</span>
929<span class="sd">        The maximum forecast time step in hours from the forecast base time.</span>
930<span class="sd">        This is the maximum step for non-flux (accumulated) forecast data.</span>
931
932<span class="sd">    Return</span>
933<span class="sd">    ------</span>
934<span class="sd">    accmaxstep : str</span>
935<span class="sd">        The maximum forecast step for the accumulated forecast fields.</span>
936<span class="sd">    &#39;&#39;&#39;</span>
937    <span class="k">if</span> <span class="ow">not</span> <span class="n">accmaxstep</span><span class="p">:</span>
938        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Control parameter ACCMAXSTEP was not set.&#39;</span><span class="p">)</span>
939        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... Value will be set depending on field type/time: &#39;</span>
940              <span class="s1">&#39;</span><span class="se">\n\t\t</span><span class="s1"> EA/EI/OD=12</span><span class="se">\n\t\t</span><span class="s1"> EP=24&#39;</span><span class="p">)</span>
941        <span class="k">if</span> <span class="n">marsclass</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;EA&#39;</span><span class="p">,</span> <span class="s1">&#39;EI&#39;</span><span class="p">,</span> <span class="s1">&#39;OD&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span>
942            <span class="c1"># Era 5, Era-Interim, On-demand operational</span>
943            <span class="n">accmaxstep</span> <span class="o">=</span> <span class="s1">&#39;12&#39;</span>
944        <span class="k">elif</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">&#39;EP&#39;</span><span class="p">:</span> <span class="c1"># CERA</span>
945            <span class="n">accmaxstep</span> <span class="o">=</span> <span class="s1">&#39;24&#39;</span>
946        <span class="k">elif</span> <span class="n">purefc</span> <span class="ow">and</span> <span class="n">accmaxstep</span> <span class="o">!=</span> <span class="n">maxstep</span><span class="p">:</span>
947            <span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">maxstep</span>
948            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... For pure forecast mode, the accumulated forecast must &#39;</span>
949                  <span class="s1">&#39;have the same maxstep as the normal forecast fields!</span><span class="se">\n</span><span class="s1">&#39;</span>
950                  <span class="s1">&#39;</span><span class="se">\t\t</span><span class="s1"> ACCMAXSTEP was set to MAXSTEP!&#39;</span><span class="p">)</span>
951        <span class="k">else</span><span class="p">:</span>
952            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: Accumulation forecast step can not be&#39;</span>
953                             <span class="s1">&#39;derived automatically!&#39;</span><span class="p">)</span>
954    <span class="k">else</span><span class="p">:</span>
955        <span class="k">if</span> <span class="n">purefc</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">accmaxstep</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">(</span><span class="n">maxstep</span><span class="p">):</span>
956            <span class="n">accmaxstep</span> <span class="o">=</span> <span class="n">maxstep</span>
957            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... For pure forecast mode, the accumulated forecast must &#39;</span>
958                  <span class="s1">&#39;have the same maxstep as the normal forecast fields!</span><span class="se">\n</span><span class="s1">&#39;</span>
959                  <span class="s1">&#39;</span><span class="se">\t\t</span><span class="s1"> ACCMAXSTEP was set to MAXSTEP!&#39;</span><span class="p">)</span>
960    <span class="k">return</span> <span class="n">accmaxstep</span></div>
961
962<div class="viewcode-block" id="check_addpar"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_addpar">[docs]</a><span class="k">def</span> <span class="nf">check_addpar</span><span class="p">(</span><span class="n">addpar</span><span class="p">):</span>
963    <span class="sd">&#39;&#39;&#39;Check that addpar has correct format of additional parameters in</span>
964<span class="sd">    a single string, so that it can be easily appended to the hard-coded</span>
965<span class="sd">    parameters retrieved in any case.</span>
966
967<span class="sd">    Parameters</span>
968<span class="sd">    ----------</span>
969<span class="sd">    addpar : str or list of str</span>
970<span class="sd">        List of additional parameters to be retrieved.</span>
971
972<span class="sd">    Return</span>
973<span class="sd">    ------</span>
974<span class="sd">    addpar : str</span>
975<span class="sd">        List of additional parameters to be retrieved.</span>
976<span class="sd">    &#39;&#39;&#39;</span>
977
978    <span class="k">if</span> <span class="n">addpar</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">addpar</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
979        <span class="k">if</span> <span class="s1">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">addpar</span><span class="p">:</span>
980            <span class="n">parlist</span> <span class="o">=</span> <span class="n">addpar</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
981            <span class="n">parlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">parlist</span> <span class="k">if</span> <span class="n">p</span> <span class="ow">is</span> <span class="ow">not</span> <span class="s1">&#39;&#39;</span><span class="p">]</span>
982        <span class="k">else</span><span class="p">:</span>
983            <span class="n">parlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">addpar</span><span class="p">]</span>
984
985        <span class="n">addpar</span> <span class="o">=</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parlist</span><span class="p">)</span>
986
987    <span class="k">return</span> <span class="n">addpar</span></div>
988
989
990<div class="viewcode-block" id="check_job_chunk"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_job_chunk">[docs]</a><span class="k">def</span> <span class="nf">check_job_chunk</span><span class="p">(</span><span class="n">job_chunk</span><span class="p">):</span>
991    <span class="sd">&#39;&#39;&#39;Checks that if job chunk is set, the number is positive and nonzero.</span>
992
993<span class="sd">    Parameters</span>
994<span class="sd">    ----------</span>
995<span class="sd">    job_chunk : int</span>
996<span class="sd">        The number of days for a single job script.</span>
997
998<span class="sd">    Return</span>
999<span class="sd">    ------</span>
1000<span class="sd">    job_chunk : int</span>
1001<span class="sd">        The number of days for a single job script.</span>
1002<span class="sd">    &#39;&#39;&#39;</span>
1003    <span class="k">if</span> <span class="ow">not</span> <span class="n">job_chunk</span><span class="p">:</span>
1004        <span class="k">return</span> <span class="n">job_chunk</span>
1005    <span class="k">else</span><span class="p">:</span>
1006        <span class="n">job_chunk</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">job_chunk</span><span class="p">)</span>
1007
1008    <span class="k">if</span> <span class="n">job_chunk</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
1009        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;ERROR: The number of job chunks is negative!</span><span class="se">\n</span><span class="s1">&#39;</span>
1010                         <span class="s1">&#39;It has to be a positive number!&#39;</span><span class="p">)</span>
1011    <span class="k">elif</span> <span class="n">job_chunk</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1012        <span class="n">job_chunk</span> <span class="o">=</span> <span class="kc">None</span>
1013    <span class="k">else</span><span class="p">:</span>
1014        <span class="k">pass</span>
1015
1016    <span class="k">return</span> <span class="n">job_chunk</span></div>
1017
1018
1019<div class="viewcode-block" id="check_number"><a class="viewcode-back" href="../Documentation/Api/api_python.html#checks.check_number">[docs]</a><span class="k">def</span> <span class="nf">check_number</span><span class="p">(</span><span class="n">number</span><span class="p">):</span>
1020    <span class="sd">&#39;&#39;&#39;Check for correct string format of ensemble member numbers.</span>
1021
1022<span class="sd">    Parameters</span>
1023<span class="sd">    ----------</span>
1024<span class="sd">    number : str</span>
1025<span class="sd">        List of ensemble member forecast runs.</span>
1026
1027<span class="sd">    Return</span>
1028<span class="sd">    ------</span>
1029<span class="sd">    number : str</span>
1030<span class="sd">        String with list of ensemble member forecast runs. E.g. &#39;01/02/03/04&#39;</span>
1031<span class="sd">    &#39;&#39;&#39;</span>
1032
1033    <span class="k">if</span> <span class="s1">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">number</span><span class="p">:</span>
1034        <span class="n">numbers</span> <span class="o">=</span> <span class="n">number</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
1035        <span class="k">if</span> <span class="s1">&#39;to&#39;</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">&#39;by&#39;</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
1036            <span class="n">number</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">numbers</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">&#39;/TO/&#39;</span> <span class="o">+</span> \
1037                     <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">numbers</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">&#39;/BY/&#39;</span> <span class="o">+</span> \
1038                     <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">numbers</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span>
1039        <span class="k">elif</span> <span class="s1">&#39;to&#39;</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s1">&#39;by&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">number</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
1040            <span class="n">number</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">numbers</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="o">+</span> <span class="s1">&#39;/TO/&#39;</span> <span class="o">+</span> \
1041                     <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">numbers</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
1042        <span class="k">else</span><span class="p">:</span>
1043            <span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">]</span>
1044            <span class="n">number</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">/&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span>
1045    <span class="k">elif</span> <span class="n">number</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
1046        <span class="n">number</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{:0&gt;3}</span><span class="s1">&#39;</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">number</span><span class="p">))</span>
1047    <span class="k">else</span><span class="p">:</span>
1048        <span class="k">pass</span>
1049
1050    <span class="k">return</span> <span class="n">number</span></div>
1051</pre></div>
1052
1053           </div>
1054           
1055          </div>
1056          <footer>
1057 
1058
1059  <hr/>
1060
1061  <div role="contentinfo">
1062    <p>
1063        &copy; Copyright 2020, Anne Philipp, Leopold Haimberger and Petra Seibert
1064
1065    </p>
1066  </div>
1067  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
1068
1069</footer>
1070
1071        </div>
1072      </div>
1073
1074    </section>
1075
1076  </div>
1077 
1078
1079
1080  <script type="text/javascript">
1081      jQuery(function () {
1082          SphinxRtdTheme.Navigation.enable(true);
1083      });
1084  </script>
1085
1086 
1087 
1088   
1089   
1090
1091</body>
1092</html>
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG