diff --git a/Documentation/html/.buildinfo b/Documentation/html/.buildinfo index 11176f535a0a18b9caaff112ecccb0b64fd78da0..6e1646ec067f535b92ca315710b719875914631f 100644 --- a/Documentation/html/.buildinfo +++ b/Documentation/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 4fe8dea6f5157d998485e509f35babce +config: 29d714f373febc7b59f641ff386667f5 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/Documentation/html/Developers/gen_docu.html b/Documentation/html/Developers/gen_docu.html index 47e5add322188c49f086f7ba283f06e6319ae0f3..2d111da9bc64ea27151afb25cd953681f1b0cebe 100644 --- a/Documentation/html/Developers/gen_docu.html +++ b/Documentation/html/Developers/gen_docu.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -182,25 +182,24 @@ <div class="section" id="additional-software"> <h2>Additional Software<a class="headerlink" href="#additional-software" title="Permalink to this headline">¶</a></h2> <p>Developers working on <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> should make extensive use of the prepared test cases, unit tests and update the documentation. For this, some additional software is necessary:</p> -<ul class="simple"> -<li>pylint</li> -<li>pytest</li> -<li>mock</li> -<li>graphviz</li> -<li>sphinx</li> -<li>pip install sphinxcontrib-exceltable</li> -<li>pip install seqdiag</li> -<li>pip install sphinxcontrib-seqdiag</li> -<li>pip install sphinxcontrib-blockdiag</li> -<li>pip install pycallgraph</li> -</ul> -<p>#- pip install sphinx-fortran</p> +<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>pip install pylint +pip install pytest +pip install mock +pip install graphviz +pip install sphinx +pip install sphinxcontrib-exceltable +pip install seqdiag +pip install sphinxcontrib-seqdiag +pip install sphinxcontrib-blockdiag +pip install pycallgraph +</pre></div> +</div> </div> <div class="section" id="online-documentation-with-sphinx"> <h2>Online-documentation with Sphinx<a class="headerlink" href="#online-documentation-with-sphinx" title="Permalink to this headline">¶</a></h2> <p>Use the scriot <code class="docutils literal notranslate"><span class="pre">gen_docu.sh</span></code> to generate an update of the online documentation of the python component.</p> <p>It uses <code class="docutils literal notranslate"><span class="pre">pyreverse</span></code> to generate a class and a package diagram with graphviz and overwrites the old files in the developers directory. -<code class="docutils literal notranslate"><span class="pre">pyreverse</span></code> creates <code class="docutils literal notranslate"><span class="pre">dot</span></code> files and with the <code class="docutils literal notranslate"><span class="pre">dot</span></code> program of the <code class="docutils literal notranslate"><span class="pre">graphviz</span></code> software the <code class="docutils literal notranslate"><span class="pre">png</span></code> files are created. Everything happens in the Python source directory before moving them finally to the <code class="docutils literal notranslate"><span class="pre">for_developers</span></code> directory. The Sphinx source code has a <code class="docutils literal notranslate"><span class="pre">_files</span></code> directory which contains links to these <code class="docutils literal notranslate"><span class="pre">png</span></code> files and therefore they should not be renamed.</p> +<code class="docutils literal notranslate"><span class="pre">pyreverse</span></code> creates <code class="docutils literal notranslate"><span class="pre">dot</span></code> files and with the <code class="docutils literal notranslate"><span class="pre">dot</span></code> program of the <code class="docutils literal notranslate"><span class="pre">graphviz</span></code> software the <code class="docutils literal notranslate"><span class="pre">png</span></code> files are created. Everything happens in the Python source directory before moving them finally to the <code class="docutils literal notranslate"><span class="pre">For_developers</span></code> directory. The Sphinx source code has a <code class="docutils literal notranslate"><span class="pre">_files</span></code> directory which contains links to these <code class="docutils literal notranslate"><span class="pre">png</span></code> files and therefore they should not be renamed.</p> <div class="section" id="sequence-diagramms"> <h3>Sequence diagramms<a class="headerlink" href="#sequence-diagramms" title="Permalink to this headline">¶</a></h3> <p>You might need to adapt the fonts path for the diagrams to a true type font. Currently it is set to:</p> @@ -242,7 +241,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Api/api_fortran.html b/Documentation/html/Documentation/Api/api_fortran.html index dc27ebe9984dd3ed59d7ac9fe9888d42f91dcdb7..850bec622499a72cb76cefc79af44ea21299748b 100644 --- a/Documentation/html/Documentation/Api/api_fortran.html +++ b/Documentation/html/Documentation/Api/api_fortran.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -209,7 +209,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Api/api_python.html b/Documentation/html/Documentation/Api/api_python.html index 6aa27cf7d0f36ceb1db362a84b92cb18e0dcb145..51fcfcc162c61aa2436fb1b282509f57a80c8617 100644 --- a/Documentation/html/Documentation/Api/api_python.html +++ b/Documentation/html/Documentation/Api/api_python.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -188,25 +188,28 @@ <h1>Python’s Auto Generated Documentation<a class="headerlink" href="#python-s-auto-generated-documentation" title="Permalink to this headline">¶</a></h1> <div class="contents local topic" id="contents"> <ul class="simple"> -<li><a class="reference internal" href="#programs" id="id3">Programs</a><ul> -<li><a class="reference internal" href="#module-install" id="id4">install</a></li> -<li><a class="reference internal" href="#module-submit" id="id5">submit</a></li> +<li><p><a class="reference internal" href="#programs" id="id3">Programs</a></p> +<ul> +<li><p><a class="reference internal" href="#module-install" id="id4">install</a></p></li> +<li><p><a class="reference internal" href="#module-submit" id="id5">submit</a></p></li> </ul> </li> -<li><a class="reference internal" href="#classes" id="id6">Classes</a><ul> -<li><a class="reference internal" href="#module-ControlFile" id="id7">ControlFile</a></li> -<li><a class="reference internal" href="#module-EcFlexpart" id="id8">EcFlexpart</a></li> -<li><a class="reference internal" href="#module-GribUtil" id="id9">GribUtil</a></li> -<li><a class="reference internal" href="#module-MarsRetrieval" id="id10">MarsRetrieval</a></li> -<li><a class="reference internal" href="#module-UioFiles" id="id11">UioFiles</a></li> +<li><p><a class="reference internal" href="#classes" id="id6">Classes</a></p> +<ul> +<li><p><a class="reference internal" href="#module-ControlFile" id="id7">ControlFile</a></p></li> +<li><p><a class="reference internal" href="#module-EcFlexpart" id="id8">EcFlexpart</a></p></li> +<li><p><a class="reference internal" href="#module-GribUtil" id="id9">GribUtil</a></p></li> +<li><p><a class="reference internal" href="#module-MarsRetrieval" id="id10">MarsRetrieval</a></p></li> +<li><p><a class="reference internal" href="#module-UioFiles" id="id11">UioFiles</a></p></li> </ul> </li> -<li><a class="reference internal" href="#modules" id="id12">Modules</a><ul> -<li><a class="reference internal" href="#module-get_mars_data" id="id13">get_mars_data</a></li> -<li><a class="reference internal" href="#module-prepare_flexpart" id="id14">prepare_flexpart</a></li> -<li><a class="reference internal" href="#module-tools" id="id15">tools</a></li> -<li><a class="reference internal" href="#module-checks" id="id16">checks</a></li> -<li><a class="reference internal" href="#module-disaggregation" id="id17">disaggregation</a></li> +<li><p><a class="reference internal" href="#modules" id="id12">Modules</a></p> +<ul> +<li><p><a class="reference internal" href="#module-get_mars_data" id="id13">get_mars_data</a></p></li> +<li><p><a class="reference internal" href="#module-prepare_flexpart" id="id14">prepare_flexpart</a></p></li> +<li><p><a class="reference internal" href="#module-tools" id="id15">tools</a></p></li> +<li><p><a class="reference internal" href="#module-checks" id="id16">checks</a></p></li> +<li><p><a class="reference internal" href="#module-disaggregation" id="id17">disaggregation</a></p></li> </ul> </li> </ul> @@ -231,215 +234,178 @@ to get information about command line parameters. Read the documentation for usage instructions.</p> <dl class="function"> <dt id="install.check_install_conditions"> -<code class="descclassname">install.</code><code class="descname">check_install_conditions</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#check_install_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.check_install_conditions" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">check_install_conditions</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#check_install_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.check_install_conditions" title="Permalink to this definition">¶</a></dt> <dd><p>Checks a couple of necessary attributes and conditions for the installation such as if they exist and contain values. Otherwise set default values.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.del_convert_build"> -<code class="descclassname">install.</code><code class="descname">del_convert_build</code><span class="sig-paren">(</span><em>src_path</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#del_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.del_convert_build" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">del_convert_build</code><span class="sig-paren">(</span><em class="sig-param">src_path</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#del_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.del_convert_build" title="Permalink to this definition">¶</a></dt> <dd><p>Clean up the Fortran source directory and remove all build files (e.g. *.o, *.mod and CONVERT2)</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.get_install_cmdline_args"> -<code class="descclassname">install.</code><code class="descname">get_install_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#get_install_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.get_install_cmdline_args" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">get_install_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#get_install_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.get_install_cmdline_args" title="Permalink to this definition">¶</a></dt> <dd><p>Decomposes the command line arguments and assigns them to variables. Apply default values for non mentioned arguments.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>args</strong> – Contains the commandline arguments from script/program call.</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Namespace</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Returns</dt> +<dd class="field-odd"><p><strong>args</strong> – Contains the commandline arguments from script/program call.</p> +</dd> +<dt class="field-even">Return type</dt> +<dd class="field-even"><p>Namespace</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.install_local"> -<code class="descclassname">install.</code><code class="descname">install_local</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#install_local"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.install_local" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">install_local</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#install_local"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.install_local" title="Permalink to this definition">¶</a></dt> <dd><p>Perform the actual installation on a local machine.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.install_via_gateway"> -<code class="descclassname">install.</code><code class="descname">install_via_gateway</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#install_via_gateway"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.install_via_gateway" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">install_via_gateway</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#install_via_gateway"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.install_via_gateway" title="Permalink to this definition">¶</a></dt> <dd><p>Prepare data transfer to remote gate and submit a job script which will install everything on the remote gate.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.main"> -<code class="descclassname">install.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.main" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.main" title="Permalink to this definition">¶</a></dt> <dd><p>Controls the installation process. Calls the installation function if target is specified.</p> </dd></dl> <dl class="function"> <dt id="install.mk_compilejob"> -<code class="descclassname">install.</code><code class="descname">mk_compilejob</code><span class="sig-paren">(</span><em>makefile</em>, <em>ecuid</em>, <em>ecgid</em>, <em>fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_compilejob"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_compilejob" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">mk_compilejob</code><span class="sig-paren">(</span><em class="sig-param">makefile</em>, <em class="sig-param">ecuid</em>, <em class="sig-param">ecgid</em>, <em class="sig-param">fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_compilejob"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_compilejob" title="Permalink to this definition">¶</a></dt> <dd><p>Modifies the original job template file so that it is specified for the user and the environment were it will be applied. Result is stored in a new file “job.temp” in the python directory.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>makefile</strong> (<em>str</em>) – Name of the makefile which should be used to compile FORTRAN -CONVERT2 program.</li> -<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> -<li><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract -environment.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>makefile</strong> (<em>str</em>) – Name of the makefile which should be used to compile FORTRAN +CONVERT2 program.</p></li> +<li><p><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</p></li> +<li><p><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</p></li> +<li><p><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract +environment.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.mk_convert_build"> -<code class="descclassname">install.</code><code class="descname">mk_convert_build</code><span class="sig-paren">(</span><em>src_path</em>, <em>makefile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_convert_build" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">mk_convert_build</code><span class="sig-paren">(</span><em class="sig-param">src_path</em>, <em class="sig-param">makefile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_convert_build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_convert_build" title="Permalink to this definition">¶</a></dt> <dd><p>Compiles the Fortran code and generates the executable.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</li> -<li><strong>makefile</strong> (<em>str</em>) – The name of the makefile which should be used.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>src_path</strong> (<em>str</em>) – Path to the fortran source directory.</p></li> +<li><p><strong>makefile</strong> (<em>str</em>) – The name of the makefile which should be used.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.mk_env_vars"> -<code class="descclassname">install.</code><code class="descname">mk_env_vars</code><span class="sig-paren">(</span><em>ecuid</em>, <em>ecgid</em>, <em>gateway</em>, <em>destination</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_env_vars"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_env_vars" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">mk_env_vars</code><span class="sig-paren">(</span><em class="sig-param">ecuid</em>, <em class="sig-param">ecgid</em>, <em class="sig-param">gateway</em>, <em class="sig-param">destination</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_env_vars"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_env_vars" title="Permalink to this definition">¶</a></dt> <dd><p>Creates a file named ECMWF_ENV which contains the necessary environmental variables at ECMWF servers. It is based on the template ECMWF_ENV.template.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> -<li><strong>gateway</strong> (<em>str</em>) – The gateway server the user is using.</li> -<li><strong>destination</strong> (<em>str</em>) – The remote destination which is used to transfer files -from ECMWF server to local gateway server.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</p></li> +<li><p><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</p></li> +<li><p><strong>gateway</strong> (<em>str</em>) – The gateway server the user is using.</p></li> +<li><p><strong>destination</strong> (<em>str</em>) – The remote destination which is used to transfer files +from ECMWF server to local gateway server.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.mk_job_template"> -<code class="descclassname">install.</code><code class="descname">mk_job_template</code><span class="sig-paren">(</span><em>ecuid</em>, <em>ecgid</em>, <em>fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_job_template"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_job_template" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">mk_job_template</code><span class="sig-paren">(</span><em class="sig-param">ecuid</em>, <em class="sig-param">ecgid</em>, <em class="sig-param">fp_root</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_job_template"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_job_template" title="Permalink to this definition">¶</a></dt> <dd><p>Modifies the original job template file so that it is specified for the user and the environment were it will be applied. Result is stored in a new file.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> -<li><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract -environment.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</p></li> +<li><p><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</p></li> +<li><p><strong>fp_root</strong> (<em>str</em>) – Path to the root directory of FLEXPART environment or flex_extract +environment.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.mk_tarball"> -<code class="descclassname">install.</code><code class="descname">mk_tarball</code><span class="sig-paren">(</span><em>tarball_path</em>, <em>target</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_tarball"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_tarball" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">mk_tarball</code><span class="sig-paren">(</span><em class="sig-param">tarball_path</em>, <em class="sig-param">target</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#mk_tarball"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.mk_tarball" title="Permalink to this definition">¶</a></dt> <dd><p>Creates a tarball with all necessary files which need to be sent to the installation directory. It does not matter if this is local or remote. Collects all python files, the Fortran source and makefiles, the ECMWF_ENV file, the CONTROL files as well as the template files.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all -relevant data for flex_extract.</li> -<li><strong>target</strong> (<em>str</em>) – The queue where the job is submitted to.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all +relevant data for flex_extract.</p></li> +<li><p><strong>target</strong> (<em>str</em>) – The queue where the job is submitted to.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="install.un_tarball"> -<code class="descclassname">install.</code><code class="descname">un_tarball</code><span class="sig-paren">(</span><em>tarball_path</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#un_tarball"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.un_tarball" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">install.</code><code class="sig-name descname">un_tarball</code><span class="sig-paren">(</span><em class="sig-param">tarball_path</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/install.html#un_tarball"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#install.un_tarball" title="Permalink to this definition">¶</a></dt> <dd><p>Extracts the given tarball into current directory.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all -relevant data for flex_extract.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>tarball_path</strong> (<em>str</em>) – The complete path to the tar file which will contain all +relevant data for flex_extract.</p> +</dd> +</dl> </dd></dl> </div> @@ -458,9 +424,9 @@ ecaccess-job-submit.</p> functions:</p> <blockquote> <div><ul class="simple"> -<li>main - the main function of the script</li> -<li>submit - calls mk_jobscript depending on operation mode and submits its</li> -<li>mk_jobscript - creates the job script from a template</li> +<li><p>main - the main function of the script</p></li> +<li><p>submit - calls mk_jobscript depending on operation mode and submits its</p></li> +<li><p>mk_jobscript - creates the job script from a template</p></li> </ul> </div></blockquote> <p>Type: submit.py –help @@ -468,7 +434,7 @@ to get information about command line parameters. Read the documentation for usage instructions.</p> <dl class="function"> <dt id="submit.main"> -<code class="descclassname">submit.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.main" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">submit.</code><code class="sig-name descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.main" title="Permalink to this definition">¶</a></dt> <dd><p>Get the arguments from script call and from CONTROL file. Decides from the argument “queue” if the local version is done “queue=None” or the gateway version with “queue=ecgate” @@ -477,49 +443,41 @@ or “queue=cca”.</p> <dl class="function"> <dt id="submit.mk_jobscript"> -<code class="descclassname">submit.</code><code class="descname">mk_jobscript</code><span class="sig-paren">(</span><em>jtemplate</em>, <em>job_file</em>, <em>clist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#mk_jobscript"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.mk_jobscript" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">submit.</code><code class="sig-name descname">mk_jobscript</code><span class="sig-paren">(</span><em class="sig-param">jtemplate</em>, <em class="sig-param">job_file</em>, <em class="sig-param">clist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#mk_jobscript"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.mk_jobscript" title="Permalink to this definition">¶</a></dt> <dd><p>Creates the job script from template.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for submission to ECMWF. It contains all necessary module and variable settings for the ECMWF environment as well as the job call and mail report instructions. -Default is “job.temp”.</li> -<li><strong>job_file</strong> (<em>str</em>) – Path to the job script file.</li> -<li><strong>clist</strong> (<em>list of str</em>) – Contains all necessary parameters for ECMWF CONTROL file.</li> +Default is “job.temp”.</p></li> +<li><p><strong>job_file</strong> (<em>str</em>) – Path to the job script file.</p></li> +<li><p><strong>clist</strong> (<em>list of str</em>) – Contains all necessary parameters for ECMWF CONTROL file.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="submit.submit"> -<code class="descclassname">submit.</code><code class="descname">submit</code><span class="sig-paren">(</span><em>jtemplate</em>, <em>c</em>, <em>queue</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#submit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.submit" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">submit.</code><code class="sig-name descname">submit</code><span class="sig-paren">(</span><em class="sig-param">jtemplate</em>, <em class="sig-param">c</em>, <em class="sig-param">queue</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/submit.html#submit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submit.submit" title="Permalink to this definition">¶</a></dt> <dd><p>Prepares the job script and submits it to the specified queue.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>jtemplate</strong> (<em>str</em>) – Job template file from sub-directory “_templates” for submission to ECMWF. It contains all necessary module and variable settings for the ECMWF environment as well as the job call and mail report instructions. -Default is “job.temp”.</li> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>queue</strong> (<em>str</em>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</li> +Default is “job.temp”.</p></li> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>queue</strong> (<em>str</em>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> </div> @@ -530,7 +488,7 @@ command line.</li> <span id="controlfile"></span><h3><a class="toc-backref" href="#id7">ControlFile</a><a class="headerlink" href="#module-ControlFile" title="Permalink to this headline">¶</a></h3> <dl class="class"> <dt id="ControlFile.ControlFile"> -<em class="property">class </em><code class="descclassname">ControlFile.</code><code class="descname">ControlFile</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">ControlFile.</code><code class="sig-name descname">ControlFile</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile" title="Permalink to this definition">¶</a></dt> <dd><p>Contains the information which are stored in the CONTROL files.</p> <p>The CONTROL file is the steering part of the FLEXPART extraction software. All necessary parameters needed to retrieve the data fields @@ -540,1081 +498,866 @@ by the command line parameters, but in generall all parameters needed for a complete set of fields for FLEXPART can be set in the CONTROL file.</p> <dl class="attribute"> <dt id="ControlFile.ControlFile.controlfile"> -<code class="descname">controlfile</code><a class="headerlink" href="#ControlFile.ControlFile.controlfile" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">controlfile</code><a class="headerlink" href="#ControlFile.ControlFile.controlfile" title="Permalink to this definition">¶</a></dt> <dd><p>The name of the control file to be processed. Default value is the filename passed to the init function when initialised.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.start_date"> -<code class="descname">start_date</code><a class="headerlink" href="#ControlFile.ControlFile.start_date" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">start_date</code><a class="headerlink" href="#ControlFile.ControlFile.start_date" title="Permalink to this definition">¶</a></dt> <dd><p>The first day of the retrieval period. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.end_date"> -<code class="descname">end_date</code><a class="headerlink" href="#ControlFile.ControlFile.end_date" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">end_date</code><a class="headerlink" href="#ControlFile.ControlFile.end_date" title="Permalink to this definition">¶</a></dt> <dd><p>The last day of the retrieval period. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.date_chunk"> -<code class="descname">date_chunk</code><a class="headerlink" href="#ControlFile.ControlFile.date_chunk" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">date_chunk</code><a class="headerlink" href="#ControlFile.ControlFile.date_chunk" title="Permalink to this definition">¶</a></dt> <dd><p>Length of period for a single mars retrieval. Default value is 3.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.dtime"> -<code class="descname">dtime</code><a class="headerlink" href="#ControlFile.ControlFile.dtime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dtime</code><a class="headerlink" href="#ControlFile.ControlFile.dtime" title="Permalink to this definition">¶</a></dt> <dd><p>The time step in hours. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.basetime"> -<code class="descname">basetime</code><a class="headerlink" href="#ControlFile.ControlFile.basetime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">basetime</code><a class="headerlink" href="#ControlFile.ControlFile.basetime" title="Permalink to this definition">¶</a></dt> <dd><p>The time for a half day retrieval. The 12 hours upfront are to be retrieved. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.maxstep"> -<code class="descname">maxstep</code><a class="headerlink" href="#ControlFile.ControlFile.maxstep" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">maxstep</code><a class="headerlink" href="#ControlFile.ControlFile.maxstep" title="Permalink to this definition">¶</a></dt> <dd><p>The maximum forecast step for non flux data. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.type"> -<code class="descname">type</code><a class="headerlink" href="#ControlFile.ControlFile.type" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">type</code><a class="headerlink" href="#ControlFile.ControlFile.type" title="Permalink to this definition">¶</a></dt> <dd><p>List of field type per retrieving hour. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.time"> -<code class="descname">time</code><a class="headerlink" href="#ControlFile.ControlFile.time" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">time</code><a class="headerlink" href="#ControlFile.ControlFile.time" title="Permalink to this definition">¶</a></dt> <dd><p>List of retrieving times in hours. Default valuer is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.step"> -<code class="descname">step</code><a class="headerlink" href="#ControlFile.ControlFile.step" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">step</code><a class="headerlink" href="#ControlFile.ControlFile.step" title="Permalink to this definition">¶</a></dt> <dd><p>List of forecast time steps in hours for non flux data. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str or str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str or str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.acctype"> -<code class="descname">acctype</code><a class="headerlink" href="#ControlFile.ControlFile.acctype" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">acctype</code><a class="headerlink" href="#ControlFile.ControlFile.acctype" title="Permalink to this definition">¶</a></dt> <dd><p>The field type for the accumulated forecast fields. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.acctime"> -<code class="descname">acctime</code><a class="headerlink" href="#ControlFile.ControlFile.acctime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">acctime</code><a class="headerlink" href="#ControlFile.ControlFile.acctime" title="Permalink to this definition">¶</a></dt> <dd><p>The starting time of the accumulated forecasts. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.accmaxstep"> -<code class="descname">accmaxstep</code><a class="headerlink" href="#ControlFile.ControlFile.accmaxstep" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">accmaxstep</code><a class="headerlink" href="#ControlFile.ControlFile.accmaxstep" title="Permalink to this definition">¶</a></dt> <dd><p>The maximum forecast step for the accumulated forecast fields (flux data). Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.marsclass"> -<code class="descname">marsclass</code><a class="headerlink" href="#ControlFile.ControlFile.marsclass" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">marsclass</code><a class="headerlink" href="#ControlFile.ControlFile.marsclass" title="Permalink to this definition">¶</a></dt> <dd><p>Characterisation of dataset. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.dataset"> -<code class="descname">dataset</code><a class="headerlink" href="#ControlFile.ControlFile.dataset" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dataset</code><a class="headerlink" href="#ControlFile.ControlFile.dataset" title="Permalink to this definition">¶</a></dt> <dd><p>For public datasets there is the specific naming and parameter dataset which has to be used to characterize the type of data. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.stream"> -<code class="descname">stream</code><a class="headerlink" href="#ControlFile.ControlFile.stream" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">stream</code><a class="headerlink" href="#ControlFile.ControlFile.stream" title="Permalink to this definition">¶</a></dt> <dd><p>Identifies the forecasting system used to generate the data. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.number"> -<code class="descname">number</code><a class="headerlink" href="#ControlFile.ControlFile.number" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">number</code><a class="headerlink" href="#ControlFile.ControlFile.number" title="Permalink to this definition">¶</a></dt> <dd><p>Selects the member in ensemble forecast run. Default value is ‘OFF’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.expver"> -<code class="descname">expver</code><a class="headerlink" href="#ControlFile.ControlFile.expver" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">expver</code><a class="headerlink" href="#ControlFile.ControlFile.expver" title="Permalink to this definition">¶</a></dt> <dd><p>The version number of the dataset. Default value is ‘1’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.gaussian"> -<code class="descname">gaussian</code><a class="headerlink" href="#ControlFile.ControlFile.gaussian" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">gaussian</code><a class="headerlink" href="#ControlFile.ControlFile.gaussian" title="Permalink to this definition">¶</a></dt> <dd><p>This parameter is deprecated and should no longer be used. Specifies the desired type of Gaussian grid for the output. Default value is an empty string ‘’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.grid"> -<code class="descname">grid</code><a class="headerlink" href="#ControlFile.ControlFile.grid" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">grid</code><a class="headerlink" href="#ControlFile.ControlFile.grid" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the output grid which can be either a Gaussian grid or a Latitude/Longitude grid. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.area"> -<code class="descname">area</code><a class="headerlink" href="#ControlFile.ControlFile.area" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">area</code><a class="headerlink" href="#ControlFile.ControlFile.area" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired sub-area of data to be extracted. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.left"> -<code class="descname">left</code><a class="headerlink" href="#ControlFile.ControlFile.left" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">left</code><a class="headerlink" href="#ControlFile.ControlFile.left" title="Permalink to this definition">¶</a></dt> <dd><p>The western most longitude of the area to be extracted. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.lower"> -<code class="descname">lower</code><a class="headerlink" href="#ControlFile.ControlFile.lower" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">lower</code><a class="headerlink" href="#ControlFile.ControlFile.lower" title="Permalink to this definition">¶</a></dt> <dd><p>The southern most latitude of the area to be extracted. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.upper"> -<code class="descname">upper</code><a class="headerlink" href="#ControlFile.ControlFile.upper" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">upper</code><a class="headerlink" href="#ControlFile.ControlFile.upper" title="Permalink to this definition">¶</a></dt> <dd><p>The northern most latitued of the area to be extracted. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.right"> -<code class="descname">right</code><a class="headerlink" href="#ControlFile.ControlFile.right" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">right</code><a class="headerlink" href="#ControlFile.ControlFile.right" title="Permalink to this definition">¶</a></dt> <dd><p>The eastern most longitude of the area to be extracted. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.level"> -<code class="descname">level</code><a class="headerlink" href="#ControlFile.ControlFile.level" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">level</code><a class="headerlink" href="#ControlFile.ControlFile.level" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the maximum level. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.levelist"> -<code class="descname">levelist</code><a class="headerlink" href="#ControlFile.ControlFile.levelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">levelist</code><a class="headerlink" href="#ControlFile.ControlFile.levelist" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the required level list. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.resol"> -<code class="descname">resol</code><a class="headerlink" href="#ControlFile.ControlFile.resol" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">resol</code><a class="headerlink" href="#ControlFile.ControlFile.resol" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired triangular truncation of retrieved data, before carrying out any other selected post-processing. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.gauss"> -<code class="descname">gauss</code><a class="headerlink" href="#ControlFile.ControlFile.gauss" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">gauss</code><a class="headerlink" href="#ControlFile.ControlFile.gauss" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select gaussian fields (1) or regular lat/lon (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.accuracy"> -<code class="descname">accuracy</code><a class="headerlink" href="#ControlFile.ControlFile.accuracy" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">accuracy</code><a class="headerlink" href="#ControlFile.ControlFile.accuracy" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the number of bits per value to be used in the generated GRIB coded fields. Default value is 24.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.omega"> -<code class="descname">omega</code><a class="headerlink" href="#ControlFile.ControlFile.omega" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">omega</code><a class="headerlink" href="#ControlFile.ControlFile.omega" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select omega retrieval (1) or not (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.omegadiff"> -<code class="descname">omegadiff</code><a class="headerlink" href="#ControlFile.ControlFile.omegadiff" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">omegadiff</code><a class="headerlink" href="#ControlFile.ControlFile.omegadiff" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to decide to calculate Omega and Dps/Dt from continuity equation for diagnostic purposes (1) or not (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.eta"> -<code class="descname">eta</code><a class="headerlink" href="#ControlFile.ControlFile.eta" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">eta</code><a class="headerlink" href="#ControlFile.ControlFile.eta" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select direct retrieval of etadot from MARS (1) or wether it has to be calculated (0). Then Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.etadiff"> -<code class="descname">etadiff</code><a class="headerlink" href="#ControlFile.ControlFile.etadiff" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">etadiff</code><a class="headerlink" href="#ControlFile.ControlFile.etadiff" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select calculation of etadot and Dps/Dt from continuity equation for diagnostic purposes (1) or not (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.etapar"> -<code class="descname">etapar</code><a class="headerlink" href="#ControlFile.ControlFile.etapar" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">etapar</code><a class="headerlink" href="#ControlFile.ControlFile.etapar" title="Permalink to this definition">¶</a></dt> <dd><p>GRIB parameter Id for etadot fields. Default value is 77.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.dpdeta"> -<code class="descname">dpdeta</code><a class="headerlink" href="#ControlFile.ControlFile.dpdeta" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dpdeta</code><a class="headerlink" href="#ControlFile.ControlFile.dpdeta" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select multiplication of etadot with dpdeta. Default value is 1.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.smooth"> -<code class="descname">smooth</code><a class="headerlink" href="#ControlFile.ControlFile.smooth" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">smooth</code><a class="headerlink" href="#ControlFile.ControlFile.smooth" title="Permalink to this definition">¶</a></dt> <dd><p>Spectral truncation of ETADOT after calculation on Gaussian grid. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.format"> -<code class="descname">format</code><a class="headerlink" href="#ControlFile.ControlFile.format" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">format</code><a class="headerlink" href="#ControlFile.ControlFile.format" title="Permalink to this definition">¶</a></dt> <dd><p>The format of the GRIB data. Default value is ‘GRIB1’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.addpar"> -<code class="descname">addpar</code><a class="headerlink" href="#ControlFile.ControlFile.addpar" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">addpar</code><a class="headerlink" href="#ControlFile.ControlFile.addpar" title="Permalink to this definition">¶</a></dt> <dd><p>List of additional surface level ECMWF parameter to be retrieved. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.prefix"> -<code class="descname">prefix</code><a class="headerlink" href="#ControlFile.ControlFile.prefix" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">prefix</code><a class="headerlink" href="#ControlFile.ControlFile.prefix" title="Permalink to this definition">¶</a></dt> <dd><p>Prefix string for the final FLEXPART/FLEXTRA ready input files. Default value is ‘EN’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.cwc"> -<code class="descname">cwc</code><a class="headerlink" href="#ControlFile.ControlFile.cwc" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">cwc</code><a class="headerlink" href="#ControlFile.ControlFile.cwc" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select wether the sum of cloud liquid water content and cloud ice water content should be retrieved. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.wrf"> -<code class="descname">wrf</code><a class="headerlink" href="#ControlFile.ControlFile.wrf" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">wrf</code><a class="headerlink" href="#ControlFile.ControlFile.wrf" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select further parameters for retrievment to support WRF simulations. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ecfsdir"> -<code class="descname">ecfsdir</code><a class="headerlink" href="#ControlFile.ControlFile.ecfsdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ecfsdir</code><a class="headerlink" href="#ControlFile.ControlFile.ecfsdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the ECMWF storage ‘ectmp:/${USER}/econdemand/’</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.mailfail"> -<code class="descname">mailfail</code><a class="headerlink" href="#ControlFile.ControlFile.mailfail" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">mailfail</code><a class="headerlink" href="#ControlFile.ControlFile.mailfail" title="Permalink to this definition">¶</a></dt> <dd><p>Email list for sending error log files from ECMWF servers. The email addresses should be seperated by a comma. Default value is [‘${USER}’].</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.mailops"> -<code class="descname">mailops</code><a class="headerlink" href="#ControlFile.ControlFile.mailops" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">mailops</code><a class="headerlink" href="#ControlFile.ControlFile.mailops" title="Permalink to this definition">¶</a></dt> <dd><p>Email list for sending operational log files from ECMWF servers. The email addresses should be seperated by a comma. Default value is [‘${USER}’].</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ecstorage"> -<code class="descname">ecstorage</code><a class="headerlink" href="#ControlFile.ControlFile.ecstorage" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ecstorage</code><a class="headerlink" href="#ControlFile.ControlFile.ecstorage" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select storage of FLEXPART ready output files in the ECFS file system. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ectrans"> -<code class="descname">ectrans</code><a class="headerlink" href="#ControlFile.ControlFile.ectrans" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ectrans</code><a class="headerlink" href="#ControlFile.ControlFile.ectrans" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select the transfer of FLEXPART ready output files to the gateway server. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.inputdir"> -<code class="descname">inputdir</code><a class="headerlink" href="#ControlFile.ControlFile.inputdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">inputdir</code><a class="headerlink" href="#ControlFile.ControlFile.inputdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the temporary directory for the retrieval grib files and other processing files. Default value is _config.PATH_INPUT_DIR.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.outputdir"> -<code class="descname">outputdir</code><a class="headerlink" href="#ControlFile.ControlFile.outputdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">outputdir</code><a class="headerlink" href="#ControlFile.ControlFile.outputdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the final directory where the final FLEXPART ready input files are stored. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.flexextractdir"> -<code class="descname">flexextractdir</code><a class="headerlink" href="#ControlFile.ControlFile.flexextractdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">flexextractdir</code><a class="headerlink" href="#ControlFile.ControlFile.flexextractdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the flex_extract root directory. Default value is _config.PATH_FLEXEXTRACT_DIR.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.exedir"> -<code class="descname">exedir</code><a class="headerlink" href="#ControlFile.ControlFile.exedir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">exedir</code><a class="headerlink" href="#ControlFile.ControlFile.exedir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the FORTRAN executable file. Default value is _config.PATH_FORTRAN_SRC.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.installdir"> -<code class="descname">installdir</code><a class="headerlink" href="#ControlFile.ControlFile.installdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">installdir</code><a class="headerlink" href="#ControlFile.ControlFile.installdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to a FLEXPART root directory. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.makefile"> -<code class="descname">makefile</code><a class="headerlink" href="#ControlFile.ControlFile.makefile" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">makefile</code><a class="headerlink" href="#ControlFile.ControlFile.makefile" title="Permalink to this definition">¶</a></dt> <dd><p>Name of the makefile to be used for the Fortran program. Default value is ‘Makefile.gfortran’.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.destination"> -<code class="descname">destination</code><a class="headerlink" href="#ControlFile.ControlFile.destination" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">destination</code><a class="headerlink" href="#ControlFile.ControlFile.destination" title="Permalink to this definition">¶</a></dt> <dd><p>The remote destination which is used to transfer files from ECMWF server to local gateway server. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.gateway"> -<code class="descname">gateway</code><a class="headerlink" href="#ControlFile.ControlFile.gateway" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">gateway</code><a class="headerlink" href="#ControlFile.ControlFile.gateway" title="Permalink to this definition">¶</a></dt> <dd><p>The gateway server the user is using. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ecuid"> -<code class="descname">ecuid</code><a class="headerlink" href="#ControlFile.ControlFile.ecuid" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ecuid</code><a class="headerlink" href="#ControlFile.ControlFile.ecuid" title="Permalink to this definition">¶</a></dt> <dd><p>The user id on ECMWF server. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ecgid"> -<code class="descname">ecgid</code><a class="headerlink" href="#ControlFile.ControlFile.ecgid" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ecgid</code><a class="headerlink" href="#ControlFile.ControlFile.ecgid" title="Permalink to this definition">¶</a></dt> <dd><p>The group id on ECMWF server. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.install_target"> -<code class="descname">install_target</code><a class="headerlink" href="#ControlFile.ControlFile.install_target" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">install_target</code><a class="headerlink" href="#ControlFile.ControlFile.install_target" title="Permalink to this definition">¶</a></dt> <dd><p>Defines the location where the installation is to be done. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.debug"> -<code class="descname">debug</code><a class="headerlink" href="#ControlFile.ControlFile.debug" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">debug</code><a class="headerlink" href="#ControlFile.ControlFile.debug" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to keep temporary files at the end of postprocessing (1) or to delete all temporary files except the final output files (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.oper"> -<code class="descname">oper</code><a class="headerlink" href="#ControlFile.ControlFile.oper" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">oper</code><a class="headerlink" href="#ControlFile.ControlFile.oper" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to prepare the operational job script. Start date, end date and basetime will be prepared with environment variables. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.request"> -<code class="descname">request</code><a class="headerlink" href="#ControlFile.ControlFile.request" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">request</code><a class="headerlink" href="#ControlFile.ControlFile.request" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select between just retrieving the data (0), writing the mars parameter values to a csv file (1) or doing both (2). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.public"> -<code class="descname">public</code><a class="headerlink" href="#ControlFile.ControlFile.public" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">public</code><a class="headerlink" href="#ControlFile.ControlFile.public" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select kind of ECMWF Web Api access and the possible data sets. Public data sets (1) and Memberstate data sets (0). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.ec_api"> -<code class="descname">ec_api</code><a class="headerlink" href="#ControlFile.ControlFile.ec_api" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">ec_api</code><a class="headerlink" href="#ControlFile.ControlFile.ec_api" title="Permalink to this definition">¶</a></dt> <dd><p>Tells wether the ECMWF Web API was able to load or not. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">boolean</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>boolean</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.cds_api"> -<code class="descname">cds_api</code><a class="headerlink" href="#ControlFile.ControlFile.cds_api" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">cds_api</code><a class="headerlink" href="#ControlFile.ControlFile.cds_api" title="Permalink to this definition">¶</a></dt> <dd><p>Tells wether the CDS API was able to load or not. Default value is None.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">boolean</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>boolean</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.purefc"> -<code class="descname">purefc</code><a class="headerlink" href="#ControlFile.ControlFile.purefc" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">purefc</code><a class="headerlink" href="#ControlFile.ControlFile.purefc" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to decide wether the job is a pure forecast retrieval or coupled with analysis data. Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.rrint"> -<code class="descname">rrint</code><a class="headerlink" href="#ControlFile.ControlFile.rrint" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">rrint</code><a class="headerlink" href="#ControlFile.ControlFile.rrint" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select between old precipitation disaggregation method (0) or the new IA3 disaggegration method (1). Default value is 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.doubleelda"> -<code class="descname">doubleelda</code><a class="headerlink" href="#ControlFile.ControlFile.doubleelda" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">doubleelda</code><a class="headerlink" href="#ControlFile.ControlFile.doubleelda" title="Permalink to this definition">¶</a></dt> <dd><p>Switch to select the calculation of extra ensemble members for the ELDA stream. It doubles the amount of retrieved ensemble members.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="ControlFile.ControlFile.logicals"> -<code class="descname">logicals</code><a class="headerlink" href="#ControlFile.ControlFile.logicals" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">logicals</code><a class="headerlink" href="#ControlFile.ControlFile.logicals" title="Permalink to this definition">¶</a></dt> <dd><p>List of the names of logical switches which controls the flow of the program. Default list is [‘gauss’, ‘omega’, ‘omegadiff’, ‘eta’, ‘etadiff’, ‘dpdeta’, ‘cwc’, ‘wrf’, ‘ecstorage’, ‘ectrans’, ‘debug’, ‘request’, ‘public’, ‘purefc’, ‘rrint’, ‘doubleelda’]</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="ControlFile.ControlFile.assign_args_to_control"> -<code class="descname">assign_args_to_control</code><span class="sig-paren">(</span><em>args</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.assign_args_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_args_to_control" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">assign_args_to_control</code><span class="sig-paren">(</span><em class="sig-param">args</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.assign_args_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_args_to_control" title="Permalink to this definition">¶</a></dt> <dd><p>Overwrites the existing ControlFile instance attributes with the command line arguments.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>args</strong> (<em>Namespace</em>) – Contains the commandline arguments from script/program call.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>args</strong> (<em>Namespace</em>) – Contains the commandline arguments from script/program call.</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="ControlFile.ControlFile.assign_envs_to_control"> -<code class="descname">assign_envs_to_control</code><span class="sig-paren">(</span><em>envs</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.assign_envs_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_envs_to_control" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">assign_envs_to_control</code><span class="sig-paren">(</span><em class="sig-param">envs</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.assign_envs_to_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.assign_envs_to_control" title="Permalink to this definition">¶</a></dt> <dd><p>Assigns the ECMWF environment parameter.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>envs</strong> (<em>dict of str</em>) – Contains the ECMWF environment parameternames “ECUID”, “ECGID”, +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>envs</strong> (<em>dict of str</em>) – Contains the ECMWF environment parameternames “ECUID”, “ECGID”, “DESTINATION” and “GATEWAY” with its corresponding values. -They were read from the file “ECMWF_ENV”.</td> -</tr> -</tbody> -</table> +They were read from the file “ECMWF_ENV”.</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="ControlFile.ControlFile.check_conditions"> -<code class="descname">check_conditions</code><span class="sig-paren">(</span><em>queue</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.check_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.check_conditions" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">check_conditions</code><span class="sig-paren">(</span><em class="sig-param">queue</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.check_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.check_conditions" title="Permalink to this definition">¶</a></dt> <dd><p>Checks a couple of necessary attributes and conditions, such as if they exist and contain values. Otherwise set default values.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>queue</strong> (<em>str</em>) – Name of the queue if submitted to the ECMWF servers. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>queue</strong> (<em>str</em>) – Name of the queue if submitted to the ECMWF servers. Used to check if ecuid, ecgid, gateway and destination -are set correctly and are not empty.</td> -</tr> -</tbody> -</table> +are set correctly and are not empty.</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="ControlFile.ControlFile.to_list"> -<code class="descname">to_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.to_list" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">to_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/ControlFile.html#ControlFile.to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#ControlFile.ControlFile.to_list" title="Permalink to this definition">¶</a></dt> <dd><p>Just generates a list of strings containing the attributes and assigned values except the attributes “_expanded”, “exedir”, “flexextractdir” and “installdir”.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>l</strong> – A sorted list of the all ControlFile class attributes with +<dl class="field-list simple"> +<dt class="field-odd">Returns</dt> +<dd class="field-odd"><p><strong>l</strong> – A sorted list of the all ControlFile class attributes with their values except the attributes “_expanded”, “exedir”, -“flexextractdir” and “installdir”.</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list of *</td> -</tr> -</tbody> -</table> +“flexextractdir” and “installdir”.</p> +</dd> +<dt class="field-even">Return type</dt> +<dd class="field-even"><p>list of *</p> +</dd> +</dl> </dd></dl> </dd></dl> @@ -1624,7 +1367,7 @@ their values except the attributes “_expanded”, “exedir”, <span id="ecflexpart"></span><h3><a class="toc-backref" href="#id8">EcFlexpart</a><a class="headerlink" href="#module-EcFlexpart" title="Permalink to this headline">¶</a></h3> <dl class="class"> <dt id="EcFlexpart.EcFlexpart"> -<em class="property">class </em><code class="descclassname">EcFlexpart.</code><code class="descname">EcFlexpart</code><span class="sig-paren">(</span><em>c</em>, <em>fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">EcFlexpart.</code><code class="sig-name descname">EcFlexpart</code><span class="sig-paren">(</span><em class="sig-param">c</em>, <em class="sig-param">fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart" title="Permalink to this definition">¶</a></dt> <dd><p>Class to represent FLEXPART specific ECMWF data.</p> <p>FLEXPART needs grib files in a specifc format. All necessary data fields for one time step are stored in a single file. The class represents an @@ -1634,429 +1377,341 @@ is able to disaggregate the fluxes and convert grid types to the one needed by FLEXPART, therefore using the FORTRAN program.</p> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.mreq_count"> -<code class="descname">mreq_count</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.mreq_count" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">mreq_count</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.mreq_count" title="Permalink to this definition">¶</a></dt> <dd><p>Counter for the number of generated mars requests.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.inputdir"> -<code class="descname">inputdir</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.inputdir" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">inputdir</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.inputdir" title="Permalink to this definition">¶</a></dt> <dd><p>Path to the directory where the retrieved data is stored.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.dataset"> -<code class="descname">dataset</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dataset" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dataset</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dataset" title="Permalink to this definition">¶</a></dt> <dd><p>For public datasets there is the specific naming and parameter dataset which has to be used to characterize the type of data.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.basetime"> -<code class="descname">basetime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.basetime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">basetime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.basetime" title="Permalink to this definition">¶</a></dt> <dd><p>The time for a half day retrieval. The 12 hours upfront are to be retrieved.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.dtime"> -<code class="descname">dtime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dtime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dtime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dtime" title="Permalink to this definition">¶</a></dt> <dd><p>Time step in hours.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.acctype"> -<code class="descname">acctype</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctype" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">acctype</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctype" title="Permalink to this definition">¶</a></dt> <dd><p>The field type for the accumulated forecast fields.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.acctime"> -<code class="descname">acctime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctime" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">acctime</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.acctime" title="Permalink to this definition">¶</a></dt> <dd><p>The starting time from the accumulated forecasts.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.accmaxstep"> -<code class="descname">accmaxstep</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accmaxstep" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">accmaxstep</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accmaxstep" title="Permalink to this definition">¶</a></dt> <dd><p>The maximum forecast step for the accumulated forecast fields.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.marsclass"> -<code class="descname">marsclass</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.marsclass" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">marsclass</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.marsclass" title="Permalink to this definition">¶</a></dt> <dd><p>Characterisation of dataset.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.stream"> -<code class="descname">stream</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.stream" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">stream</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.stream" title="Permalink to this definition">¶</a></dt> <dd><p>Identifies the forecasting system used to generate the data.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.number"> -<code class="descname">number</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.number" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">number</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.number" title="Permalink to this definition">¶</a></dt> <dd><p>Selects the member in ensemble forecast run.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.resol"> -<code class="descname">resol</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.resol" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">resol</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.resol" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired triangular truncation of retrieved data, before carrying out any other selected post-processing.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.accuracy"> -<code class="descname">accuracy</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accuracy" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">accuracy</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.accuracy" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the number of bits per value to be used in the generated GRIB coded fields.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.addpar"> -<code class="descname">addpar</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.addpar" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">addpar</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.addpar" title="Permalink to this definition">¶</a></dt> <dd><p>List of additional parameters to be retrieved.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.level"> -<code class="descname">level</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.level" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">level</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.level" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the maximum level.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.expver"> -<code class="descname">expver</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.expver" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">expver</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.expver" title="Permalink to this definition">¶</a></dt> <dd><p>The version of the dataset.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.levelist"> -<code class="descname">levelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.levelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">levelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.levelist" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the required levels.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.glevelist"> -<code class="descname">glevelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.glevelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">glevelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.glevelist" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the required levels for gaussian grids.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.gaussian"> -<code class="descname">gaussian</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.gaussian" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">gaussian</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.gaussian" title="Permalink to this definition">¶</a></dt> <dd><p>This parameter is deprecated and should no longer be used. Specifies the desired type of Gaussian grid for the output.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.grid"> -<code class="descname">grid</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.grid" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">grid</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.grid" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the output grid which can be either a Gaussian grid or a Latitude/Longitude grid.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.area"> -<code class="descname">area</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.area" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">area</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.area" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired sub-area of data to be extracted.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.purefc"> -<code class="descname">purefc</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.purefc" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">purefc</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.purefc" title="Permalink to this definition">¶</a></dt> <dd><p>Switch for definition of pure forecast mode or not.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.outputfilelist"> -<code class="descname">outputfilelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.outputfilelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">outputfilelist</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.outputfilelist" title="Permalink to this definition">¶</a></dt> <dd><p>The final list of FLEXPART ready input files.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.types"> -<code class="descname">types</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.types" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">types</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.types" title="Permalink to this definition">¶</a></dt> <dd><p>Determines the combination of type of fields, time and forecast step to be retrieved.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">dictionary</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>dictionary</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.params"> -<code class="descname">params</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.params" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">params</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.params" title="Permalink to this definition">¶</a></dt> <dd><p>Collection of grid types and their corresponding parameters, levels, level types and the grid definition.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">dictionary</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>dictionary</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.server"> -<code class="descname">server</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.server" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">server</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.server" title="Permalink to this definition">¶</a></dt> <dd><p>This is the connection to the ECMWF data servers.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">ECMWFService or ECMWFDataServer</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>ECMWFService or ECMWFDataServer</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.public"> -<code class="descname">public</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.public" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">public</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.public" title="Permalink to this definition">¶</a></dt> <dd><p>Decides which Web API Server version is used.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="EcFlexpart.EcFlexpart.dates"> -<code class="descname">dates</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dates" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dates</code><a class="headerlink" href="#EcFlexpart.EcFlexpart.dates" title="Permalink to this definition">¶</a></dt> <dd><p>Contains start and end date of the retrieval in the format “YYYYMMDD/to/YYYYMMDD”</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.calc_extra_elda"> -<code class="descname">calc_extra_elda</code><span class="sig-paren">(</span><em>path</em>, <em>prefix</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.calc_extra_elda"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.calc_extra_elda" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">calc_extra_elda</code><span class="sig-paren">(</span><em class="sig-param">path</em>, <em class="sig-param">prefix</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.calc_extra_elda"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.calc_extra_elda" title="Permalink to this definition">¶</a></dt> <dd><p>Calculates extra ensemble members for ELDA - Stream.</p> <p>This is a specific feature which doubles the number of ensemble members for the ELDA Stream.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>path</strong> (<em>str</em>) – Path to the output files.</li> -<li><strong>prefix</strong> (<em>str</em>) – The prefix of the output filenames as defined in Control file.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>path</strong> (<em>str</em>) – Path to the output files.</p></li> +<li><p><strong>prefix</strong> (<em>str</em>) – The prefix of the output filenames as defined in Control file.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.create"> -<code class="descname">create</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.create" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">create</code><span class="sig-paren">(</span><em class="sig-param">inputfiles</em>, <em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.create" title="Permalink to this definition">¶</a></dt> <dd><p>An index file will be created which depends on the combination of “date”, “time” and “stepRange” values. This is used to iterate over all messages in each grib file which were passed through the @@ -2066,52 +1721,44 @@ the data fields all to the same grid and put them in one file per unique time step (combination of “date”, “time” and “stepRange”).</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">This method is based on the ECMWF example index.py +<p class="admonition-title">Note</p> +<p>This method is based on the ECMWF example index.py <a class="reference external" href="https://software.ecmwf.int/wiki/display/GRIB/index.py">https://software.ecmwf.int/wiki/display/GRIB/index.py</a></p> </div> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains a list of files.</li> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains a list of files.</p></li> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.deacc_fluxes"> -<code class="descname">deacc_fluxes</code><span class="sig-paren">(</span><em>inputfiles</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.deacc_fluxes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.deacc_fluxes" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">deacc_fluxes</code><span class="sig-paren">(</span><em class="sig-param">inputfiles</em>, <em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.deacc_fluxes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.deacc_fluxes" title="Permalink to this definition">¶</a></dt> <dd><p>De-accumulate and disaggregate flux data.</p> <p>Goes through all flux fields in ordered time and de-accumulate the fields. Afterwards the fields are disaggregated in time. Different versions of disaggregation is provided for rainfall data (darain, modified linear) and the surface fluxes and stress data (dapoly, cubic polynomial).</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains the list of files that contain flux data.</li> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>inputfiles</strong> (<a class="reference internal" href="#UioFiles.UioFiles" title="UioFiles.UioFiles"><em>UioFiles</em></a>) – Contains the list of files that contain flux data.</p></li> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.process_output"> -<code class="descname">process_output</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.process_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.process_output" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">process_output</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.process_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.process_output" title="Permalink to this definition">¶</a></dt> <dd><p>Postprocessing of FLEXPART input files.</p> <p>The grib files are postprocessed depending on the selection in CONTROL file. The resulting files are moved to the output @@ -2121,69 +1768,58 @@ properly switched in CONTROL file: GRIB2 - Conversion to GRIB2 ECTRANS - Transfer of files to gateway server ECSTORAGE - Storage at ECMWF server</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.retrieve"> -<code class="descname">retrieve</code><span class="sig-paren">(</span><em>server</em>, <em>dates</em>, <em>public</em>, <em>request</em>, <em>inputdir='.'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.retrieve" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">retrieve</code><span class="sig-paren">(</span><em class="sig-param">server</em>, <em class="sig-param">dates</em>, <em class="sig-param">public</em>, <em class="sig-param">request</em>, <em class="sig-param">inputdir='.'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.retrieve" title="Permalink to this definition">¶</a></dt> <dd><p>Finalizing the retrieval information by setting final details depending on grid type. Prepares MARS retrievals per grid type and submits them.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The connection to the ECMWF server. This is different +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The connection to the ECMWF server. This is different for member state users which have full access and non member state users which have only access to the public data sets. The decision is made from command line argument “public”; for public access its True (ECMWFDataServer) -for member state users its False (ECMWFService)</li> -<li><strong>dates</strong> (<em>str</em>) – Contains start and end date of the retrieval in the format -“YYYYMMDD/to/YYYYMMDD”</li> -<li><strong>request</strong> (<em>int</em>) – Selects the mode of retrieval. +for member state users its False (ECMWFService)</p></li> +<li><p><strong>dates</strong> (<em>str</em>) – Contains start and end date of the retrieval in the format +“YYYYMMDD/to/YYYYMMDD”</p></li> +<li><p><strong>request</strong> (<em>int</em>) – Selects the mode of retrieval. 0: Retrieves the data from ECMWF. 1: Prints the mars requests to an output file. -2: Retrieves the data and prints the mars request.</li> -<li><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is about -to be stored. The default is the current directory (‘.’).</li> +2: Retrieves the data and prints the mars request.</p></li> +<li><p><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is about +to be stored. The default is the current directory (‘.’).</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="EcFlexpart.EcFlexpart.write_namelist"> -<code class="descname">write_namelist</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.write_namelist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.write_namelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">write_namelist</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/EcFlexpart.html#EcFlexpart.write_namelist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#EcFlexpart.EcFlexpart.write_namelist" title="Permalink to this definition">¶</a></dt> <dd><p>Creates a namelist file in the temporary directory and writes the following values to it: maxl, maxb, mlevel, mlevelist, mnauf, metapar, rlo0, rlo1, rla0, rla1, momega, momegadiff, mgauss, msmooth, meta, metadiff, mdpdeta</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>filename</strong> (<em>str</em>) – Name of the namelist file.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>filename</strong> (<em>str</em>) – Name of the namelist file.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> </dd></dl> @@ -2193,7 +1829,7 @@ command line.</li> <span id="gributil"></span><h3><a class="toc-backref" href="#id9">GribUtil</a><a class="headerlink" href="#module-GribUtil" title="Permalink to this headline">¶</a></h3> <dl class="class"> <dt id="GribUtil.GribUtil"> -<em class="property">class </em><code class="descclassname">GribUtil.</code><code class="descname">GribUtil</code><span class="sig-paren">(</span><em>filenames</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">GribUtil.</code><code class="sig-name descname">GribUtil</code><span class="sig-paren">(</span><em class="sig-param">filenames</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil" title="Permalink to this definition">¶</a></dt> <dd><p>Class for GRIB utilities (new methods) based on GRIB API</p> <p>The GRIB API provides all necessary tools to work directly with the grib files. Nevertheless, the GRIB API tools are very basic and are in @@ -2205,107 +1841,91 @@ class objects without having to think about how the actual GRIB API tools have to be arranged.</p> <dl class="method"> <dt id="GribUtil.GribUtil.copy_dummy_msg"> -<code class="descname">copy_dummy_msg</code><span class="sig-paren">(</span><em>filename_in</em>, <em>keynames</em>, <em>keyvalues</em>, <em>selectwhere=True</em>, <em>filemode='wb'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.copy_dummy_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.copy_dummy_msg" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">copy_dummy_msg</code><span class="sig-paren">(</span><em class="sig-param">filename_in</em>, <em class="sig-param">keynames</em>, <em class="sig-param">keyvalues</em>, <em class="sig-param">selectwhere=True</em>, <em class="sig-param">filemode='wb'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.copy_dummy_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.copy_dummy_msg" title="Permalink to this definition">¶</a></dt> <dd><p>Add the content of another input grib file to the objects file but only messages corresponding to keys/values passed to the function. The selectWhere switch decides if to copy the keys equal to (True) or different to (False) the keynames/keyvalues list passed to the function.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>filename_in</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> -<li><strong>selectwhere</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if to copy the keynames and values equal to (True) or +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>filename_in</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</p></li> +<li><p><strong>selectwhere</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">boolean</span></code>, optional) – Decides if to copy the keynames and values equal to (True) or different to (False) the keynames/keyvalues list passed to the -function. Default is True.</li> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</li> -<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues.</li> -<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “wb”.</li> +function. Default is True.</p></li> +<li><p><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</p></li> +<li><p><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues.</p></li> +<li><p><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “wb”.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="GribUtil.GribUtil.get_keys"> -<code class="descname">get_keys</code><span class="sig-paren">(</span><em>keynames</em>, <em>wherekeynames</em>, <em>wherekeyvalues</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.get_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.get_keys" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">get_keys</code><span class="sig-paren">(</span><em class="sig-param">keynames</em>, <em class="sig-param">wherekeynames</em>, <em class="sig-param">wherekeyvalues</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.get_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.get_keys" title="Permalink to this definition">¶</a></dt> <dd><p>Get keyvalues for a given list of keynames a where statement can be given (list of key and list of values)</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</li> -<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of key names for indexing grib message parameter.</li> -<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of key values corresponding the key names.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames.</p></li> +<li><p><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of key names for indexing grib message parameter.</p></li> +<li><p><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of key values corresponding the key names.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>return_list</strong> – List of keyvalues for given keynames.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>return_list</strong> – List of keyvalues for given keynames.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code></p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="GribUtil.GribUtil.index"> -<code class="descname">index</code><span class="sig-paren">(</span><em>index_keys</em>, <em>index_file='my.idx'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.index" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">index</code><span class="sig-paren">(</span><em class="sig-param">index_keys</em>, <em class="sig-param">index_file='my.idx'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.index" title="Permalink to this definition">¶</a></dt> <dd><p>Create index file from a list of files if it does not exist or read an index file.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>index_keys</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Contains the list of key parameter names from -which the index is to be created.</li> -<li><strong>index_file</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Filename where the indices are stored. -Default is “my.idx”.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>index_keys</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Contains the list of key parameter names from +which the index is to be created.</p></li> +<li><p><strong>index_file</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Filename where the indices are stored. +Default is “my.idx”.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>iid</strong> – Grib index id.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code></p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>iid</strong> – Grib index id.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">integer</span></code></p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="GribUtil.GribUtil.set_keys"> -<code class="descname">set_keys</code><span class="sig-paren">(</span><em>fromfile</em>, <em>keynames</em>, <em>keyvalues</em>, <em>wherekeynames</em>, <em>wherekeyvalues</em>, <em>filemode='wb'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.set_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.set_keys" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">set_keys</code><span class="sig-paren">(</span><em class="sig-param">fromfile</em>, <em class="sig-param">keynames</em>, <em class="sig-param">keyvalues</em>, <em class="sig-param">wherekeynames</em>, <em class="sig-param">wherekeyvalues</em>, <em class="sig-param">filemode='wb'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/GribUtil.html#GribUtil.set_keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#GribUtil.GribUtil.set_keys" title="Permalink to this definition">¶</a></dt> <dd><p>Opens the file to read the grib messages and then write the selected messages (with wherekeys) to a new output file. Also, the keyvalues of the passed list of keynames are set.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>fromfile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</li> -<li><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames to set in the selected messages. -Default is an empty list.</li> -<li><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues to set in the selected messages. -Default is an empty list.</li> -<li><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames to select correct message.</li> -<li><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues for keynames to select correct message.</li> -<li><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “wb”.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>fromfile</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – Filename of the input file to read the grib messages from.</p></li> +<li><p><strong>keynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames to set in the selected messages. +Default is an empty list.</p></li> +<li><p><strong>keyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues to set in the selected messages. +Default is an empty list.</p></li> +<li><p><strong>wherekeynames</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keynames to select correct message.</p></li> +<li><p><strong>wherekeyvalues</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">list</span></code> of <code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>) – List of keyvalues for keynames to select correct message.</p></li> +<li><p><strong>filemode</strong> (<code class="xref py py-obj docutils literal notranslate"><span class="pre">string</span></code>, optional) – Sets the mode for the output file. Default is “wb”.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> </dd></dl> @@ -2315,7 +1935,7 @@ Default is an empty list.</li> <span id="marsretrieval"></span><h3><a class="toc-backref" href="#id10">MarsRetrieval</a><a class="headerlink" href="#module-MarsRetrieval" title="Permalink to this headline">¶</a></h3> <dl class="class"> <dt id="MarsRetrieval.MarsRetrieval"> -<em class="property">class </em><code class="descclassname">MarsRetrieval.</code><code class="descname">MarsRetrieval</code><span class="sig-paren">(</span><em>server</em>, <em>public</em>, <em>marsclass='EA'</em>, <em>dataset=''</em>, <em>type=''</em>, <em>levtype=''</em>, <em>levelist=''</em>, <em>repres=''</em>, <em>date=''</em>, <em>resol=''</em>, <em>stream=''</em>, <em>area=''</em>, <em>time=''</em>, <em>step=''</em>, <em>expver='1'</em>, <em>number=''</em>, <em>accuracy=''</em>, <em>grid=''</em>, <em>gaussian=''</em>, <em>target=''</em>, <em>param=''</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">MarsRetrieval.</code><code class="sig-name descname">MarsRetrieval</code><span class="sig-paren">(</span><em class="sig-param">server</em>, <em class="sig-param">public</em>, <em class="sig-param">marsclass='EA'</em>, <em class="sig-param">dataset=''</em>, <em class="sig-param">type=''</em>, <em class="sig-param">levtype=''</em>, <em class="sig-param">levelist=''</em>, <em class="sig-param">repres=''</em>, <em class="sig-param">date=''</em>, <em class="sig-param">resol=''</em>, <em class="sig-param">stream=''</em>, <em class="sig-param">area=''</em>, <em class="sig-param">time=''</em>, <em class="sig-param">step=''</em>, <em class="sig-param">expver='1'</em>, <em class="sig-param">number=''</em>, <em class="sig-param">accuracy=''</em>, <em class="sig-param">grid=''</em>, <em class="sig-param">gaussian=''</em>, <em class="sig-param">target=''</em>, <em class="sig-param">param=''</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval" title="Permalink to this definition">¶</a></dt> <dd><p>Specific syntax and content for submission of MARS retrievals.</p> <p>A MARS revtrieval has a specific syntax with a selection of keywords and their corresponding values. This class provides the necessary functions @@ -2327,309 +1947,246 @@ values can be found here: <a class="reference external" href="https://software.ecmwf.int/wiki/display/UDOC/">https://software.ecmwf.int/wiki/display/UDOC/</a> Identification+keywords#Identificationkeywords-class</p> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.server"> -<code class="descname">server</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.server" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">server</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.server" title="Permalink to this definition">¶</a></dt> <dd><p>This is the connection to the ECMWF data servers.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">ECMWFService or ECMWFDataServer</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>ECMWFService or ECMWFDataServer</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.public"> -<code class="descname">public</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.public" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">public</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.public" title="Permalink to this definition">¶</a></dt> <dd><p>Decides which Web API Server version is used.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.marsclass"> -<code class="descname">marsclass</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.marsclass" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">marsclass</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.marsclass" title="Permalink to this definition">¶</a></dt> <dd><p>Characterisation of dataset.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.dataset"> -<code class="descname">dataset</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.dataset" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">dataset</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.dataset" title="Permalink to this definition">¶</a></dt> <dd><p>For public datasets there is the specific naming and parameter dataset which has to be used to characterize the type of data.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.type"> -<code class="descname">type</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.type" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">type</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.type" title="Permalink to this definition">¶</a></dt> <dd><p>Determines the type of fields to be retrieved.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.levtype"> -<code class="descname">levtype</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levtype" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">levtype</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levtype" title="Permalink to this definition">¶</a></dt> <dd><p>Denotes type of level.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.levelist"> -<code class="descname">levelist</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levelist" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">levelist</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.levelist" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the required levels.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.repres"> -<code class="descname">repres</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.repres" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">repres</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.repres" title="Permalink to this definition">¶</a></dt> <dd><p>Selects the representation of the archived data.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.date"> -<code class="descname">date</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.date" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">date</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.date" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the Analysis date, the Forecast base date or Observations date.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.resol"> -<code class="descname">resol</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.resol" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">resol</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.resol" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired triangular truncation of retrieved data, before carrying out any other selected post-processing.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.stream"> -<code class="descname">stream</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.stream" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">stream</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.stream" title="Permalink to this definition">¶</a></dt> <dd><p>Identifies the forecasting system used to generate the data.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.area"> -<code class="descname">area</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.area" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">area</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.area" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the desired sub-area of data to be extracted.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.time"> -<code class="descname">time</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.time" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">time</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.time" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the time of the data in hours and minutes.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.step"> -<code class="descname">step</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.step" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">step</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.step" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the forecast time step from forecast base time.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.expver"> -<code class="descname">expver</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.expver" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">expver</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.expver" title="Permalink to this definition">¶</a></dt> <dd><p>The version of the dataset.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.number"> -<code class="descname">number</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.number" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">number</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.number" title="Permalink to this definition">¶</a></dt> <dd><p>Selects the member in ensemble forecast run.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.accuracy"> -<code class="descname">accuracy</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.accuracy" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">accuracy</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.accuracy" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the number of bits per value to be used in the generated GRIB coded fields.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.grid"> -<code class="descname">grid</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.grid" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">grid</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.grid" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the output grid which can be either a Gaussian grid or a Latitude/Longitude grid.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.gaussian"> -<code class="descname">gaussian</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.gaussian" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">gaussian</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.gaussian" title="Permalink to this definition">¶</a></dt> <dd><p>This parameter is deprecated and should no longer be used. Specifies the desired type of Gaussian grid for the output.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.target"> -<code class="descname">target</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.target" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">target</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.target" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies a file into which data is to be written after retrieval or manipulation.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="MarsRetrieval.MarsRetrieval.param"> -<code class="descname">param</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.param" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">param</code><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.param" title="Permalink to this definition">¶</a></dt> <dd><p>Specifies the meteorological parameter.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="MarsRetrieval.MarsRetrieval.data_retrieve"> -<code class="descname">data_retrieve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.data_retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.data_retrieve" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">data_retrieve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.data_retrieve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.data_retrieve" title="Permalink to this definition">¶</a></dt> <dd><p>Submits a MARS retrieval. Depending on the existence of ECMWF Web-API or CDS API it is submitted via Python or a subprocess in the Shell. The parameter for the mars retrieval @@ -2638,27 +2195,23 @@ are taken from the defined class attributes.</p> <dl class="method"> <dt id="MarsRetrieval.MarsRetrieval.display_info"> -<code class="descname">display_info</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.display_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.display_info" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">display_info</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.display_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.display_info" title="Permalink to this definition">¶</a></dt> <dd><p>Prints all class attributes and their values to the standard output.</p> </dd></dl> <dl class="method"> <dt id="MarsRetrieval.MarsRetrieval.print_infodata_csv"> -<code class="descname">print_infodata_csv</code><span class="sig-paren">(</span><em>inputdir</em>, <em>request_number</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.print_infodata_csv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.print_infodata_csv" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">print_infodata_csv</code><span class="sig-paren">(</span><em class="sig-param">inputdir</em>, <em class="sig-param">request_number</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/MarsRetrieval.html#MarsRetrieval.print_infodata_csv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#MarsRetrieval.MarsRetrieval.print_infodata_csv" title="Permalink to this definition">¶</a></dt> <dd><p>Write all request parameter in alpabetical order into a “csv” file.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>inputdir</strong> (<em>str</em>) – The path where all data from the retrievals are stored.</li> -<li><strong>request_number</strong> (<em>int</em>) – Number of mars requests for flux and non-flux data.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>inputdir</strong> (<em>str</em>) – The path where all data from the retrievals are stored.</p></li> +<li><p><strong>request_number</strong> (<em>int</em>) – Number of mars requests for flux and non-flux data.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> </dd></dl> @@ -2668,56 +2221,47 @@ standard output.</p> <span id="uiofiles"></span><h3><a class="toc-backref" href="#id11">UioFiles</a><a class="headerlink" href="#module-UioFiles" title="Permalink to this headline">¶</a></h3> <dl class="class"> <dt id="UioFiles.UioFiles"> -<em class="property">class </em><code class="descclassname">UioFiles.</code><code class="descname">UioFiles</code><span class="sig-paren">(</span><em>path</em>, <em>pattern</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/UioFiles.html#UioFiles"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">UioFiles.</code><code class="sig-name descname">UioFiles</code><span class="sig-paren">(</span><em class="sig-param">path</em>, <em class="sig-param">pattern</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/UioFiles.html#UioFiles"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles" title="Permalink to this definition">¶</a></dt> <dd><p>Collection of files matching a specific pattern.</p> <p>The pattern can contain regular expressions for the files. The files are listed and can be transformed to a single string or they can be deleted.</p> <dl class="attribute"> <dt id="UioFiles.UioFiles.path"> -<code class="descname">path</code><a class="headerlink" href="#UioFiles.UioFiles.path" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">path</code><a class="headerlink" href="#UioFiles.UioFiles.path" title="Permalink to this definition">¶</a></dt> <dd><p>Directory where to list the files.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="UioFiles.UioFiles.pattern"> -<code class="descname">pattern</code><a class="headerlink" href="#UioFiles.UioFiles.pattern" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">pattern</code><a class="headerlink" href="#UioFiles.UioFiles.pattern" title="Permalink to this definition">¶</a></dt> <dd><p>Regular expression pattern. For example: ‘<a href="#id1"><span class="problematic" id="id2">*</span></a>.grb’</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="attribute"> <dt id="UioFiles.UioFiles.files"> -<code class="descname">files</code><a class="headerlink" href="#UioFiles.UioFiles.files" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">files</code><a class="headerlink" href="#UioFiles.UioFiles.files" title="Permalink to this definition">¶</a></dt> <dd><p>List of files matching the pattern in the path.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="method"> <dt id="UioFiles.UioFiles.delete_files"> -<code class="descname">delete_files</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/UioFiles.html#UioFiles.delete_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles.delete_files" title="Permalink to this definition">¶</a></dt> +<code class="sig-name descname">delete_files</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/UioFiles.html#UioFiles.delete_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#UioFiles.UioFiles.delete_files" title="Permalink to this definition">¶</a></dt> <dd><p>Deletes the files.</p> </dd></dl> @@ -2736,13 +2280,13 @@ extracted. They define the data set to be extracted from MARS.</p> functions:</p> <blockquote> <div><ul class="simple"> -<li>main - the main function of the script</li> -<li>get_mars_data - overall control of ECMWF data retrievment</li> -<li>write_reqheader - writes the header into the mars_request file</li> -<li>mk_server - creates the server connection to ECMWF servers</li> -<li>mk_dates - defines the start and end date</li> -<li>remove_old - deletes old retrieved grib files</li> -<li>do_retrievement - creates individual retrievals</li> +<li><p>main - the main function of the script</p></li> +<li><p>get_mars_data - overall control of ECMWF data retrievment</p></li> +<li><p>write_reqheader - writes the header into the mars_request file</p></li> +<li><p>mk_server - creates the server connection to ECMWF servers</p></li> +<li><p>mk_dates - defines the start and end date</p></li> +<li><p>remove_old - deletes old retrieved grib files</p></li> +<li><p>do_retrievement - creates individual retrievals</p></li> </ul> </div></blockquote> <p>Type: get_mars_data.py –help @@ -2750,76 +2294,65 @@ to get information about command line parameters. Read the documentation for usage instructions.</p> <dl class="function"> <dt id="get_mars_data.check_dates_for_nonflux_fc_times"> -<code class="descclassname">get_mars_data.</code><code class="descname">check_dates_for_nonflux_fc_times</code><span class="sig-paren">(</span><em>types</em>, <em>times</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#check_dates_for_nonflux_fc_times"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.check_dates_for_nonflux_fc_times" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">check_dates_for_nonflux_fc_times</code><span class="sig-paren">(</span><em class="sig-param">types</em>, <em class="sig-param">times</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#check_dates_for_nonflux_fc_times"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.check_dates_for_nonflux_fc_times" title="Permalink to this definition">¶</a></dt> <dd><p>Checks if the time 18UTC corresponds to forecast field.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>types</strong> (<em>list of str</em>) – List of field types.</li> -<li><strong>times</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>types</strong> (<em>list of str</em>) – List of field types.</p></li> +<li><p><strong>times</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"></p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">True or False</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p></p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>True or False</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.do_retrievement"> -<code class="descclassname">get_mars_data.</code><code class="descname">do_retrievement</code><span class="sig-paren">(</span><em>c</em>, <em>server</em>, <em>start</em>, <em>end</em>, <em>delta_t</em>, <em>fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#do_retrievement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.do_retrievement" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">do_retrievement</code><span class="sig-paren">(</span><em class="sig-param">c</em>, <em class="sig-param">server</em>, <em class="sig-param">start</em>, <em class="sig-param">end</em>, <em class="sig-param">delta_t</em>, <em class="sig-param">fluxes=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#do_retrievement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.do_retrievement" title="Permalink to this definition">¶</a></dt> <dd><p>Divides the complete retrieval period in smaller chunks and retrieves the data from MARS.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The server connection to ECMWF.</li> -<li><strong>start</strong> (<em>datetime</em>) – The start date of the retrieval.</li> -<li><strong>end</strong> (<em>datetime</em>) – The end date of the retrieval.</li> -<li><strong>delta_t</strong> (<em>datetime</em>) – Delta_t + 1 is the maximal time period of a single -retrieval.</li> -<li><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameters are to be retrieved or +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>server</strong> (<em>ECMWFService</em><em> or </em><em>ECMWFDataServer</em>) – The server connection to ECMWF.</p></li> +<li><p><strong>start</strong> (<em>datetime</em>) – The start date of the retrieval.</p></li> +<li><p><strong>end</strong> (<em>datetime</em>) – The end date of the retrieval.</p></li> +<li><p><strong>delta_t</strong> (<em>datetime</em>) – Delta_t + 1 is the maximal time period of a single +retrieval.</p></li> +<li><p><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameters are to be retrieved or the rest of the parameter list. -Default value is False.</li> +Default value is False.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.get_mars_data"> -<code class="descclassname">get_mars_data.</code><code class="descname">get_mars_data</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#get_mars_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.get_mars_data" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">get_mars_data</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#get_mars_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.get_mars_data" title="Permalink to this definition">¶</a></dt> <dd><p>Retrieves the EC data needed for a FLEXPART simulation.</p> <p>Start and end dates for retrieval period is set. Retrievals are divided into smaller periods if necessary and datechunk parameter is set.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.main"> -<code class="descclassname">get_mars_data.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.main" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.main" title="Permalink to this definition">¶</a></dt> <dd><p>Controls the program to get data out of mars.</p> <p>This is done if it is called directly from command line. Then it also takes program call arguments and control file input.</p> @@ -2827,7 +2360,7 @@ Then it also takes program call arguments and control file input.</p> <dl class="function"> <dt id="get_mars_data.mk_dates"> -<code class="descclassname">get_mars_data.</code><code class="descname">mk_dates</code><span class="sig-paren">(</span><em>c</em>, <em>fluxes</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#mk_dates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_dates" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">mk_dates</code><span class="sig-paren">(</span><em class="sig-param">c</em>, <em class="sig-param">fluxes</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#mk_dates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_dates" title="Permalink to this definition">¶</a></dt> <dd><p>Prepares start and end date depending on flux or non flux data.</p> <p>If forecast for maximum one day (upto 24h) are to be retrieved, then collect accumulation data (flux data) with additional days in the @@ -2839,84 +2372,72 @@ collect accumulation data (flux data) with the exact start and end date boundary conditions)</p> <p>Since for basetime the extraction contains the 12 hours upfront, if basetime is 0, the starting date has to be the day before</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameter settings are stored or +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>fluxes</strong> (<em>boolean</em><em>, </em><em>optional</em>) – Decides if the flux parameter settings are stored or the rest of the parameter list. -Default value is False.</li> +Default value is False.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> -<li><strong>start</strong> (<em>datetime</em>) – The start date of the retrieving data set.</li> -<li><strong>end</strong> (<em>datetime</em>) – The end date of the retrieving data set.</li> -<li><strong>chunk</strong> (<em>datetime</em>) – Time period in days for one single mars retrieval.</li> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>start</strong> (<em>datetime</em>) – The start date of the retrieving data set.</p></li> +<li><p><strong>end</strong> (<em>datetime</em>) – The end date of the retrieving data set.</p></li> +<li><p><strong>chunk</strong> (<em>datetime</em>) – Time period in days for one single mars retrieval.</p></li> </ul> </p> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.mk_server"> -<code class="descclassname">get_mars_data.</code><code class="descname">mk_server</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#mk_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_server" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">mk_server</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#mk_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.mk_server" title="Permalink to this definition">¶</a></dt> <dd><p>Creates a server connection with available python API.</p> <p>Which API is used depends on availability and the dataset to be retrieved. The CDS API is used for ERA5 dataset no matter if the user is a member or a public user. ECMWF WebAPI is used for all other available datasets.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>server</strong> – Connection to ECMWF server via python interface ECMWF WebAPI or CDS API.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">ECMWFDataServer, ECMWFService or Client</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>server</strong> – Connection to ECMWF server via python interface ECMWF WebAPI or CDS API.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>ECMWFDataServer, ECMWFService or Client</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.remove_old"> -<code class="descclassname">get_mars_data.</code><code class="descname">remove_old</code><span class="sig-paren">(</span><em>pattern</em>, <em>inputdir</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#remove_old"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.remove_old" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">remove_old</code><span class="sig-paren">(</span><em class="sig-param">pattern</em>, <em class="sig-param">inputdir</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#remove_old"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.remove_old" title="Permalink to this definition">¶</a></dt> <dd><p>Deletes old retrieval files from current input directory matching the pattern.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>pattern</strong> (<em>str</em>) – The sub string pattern which identifies the files to be deleted.</li> -<li><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is stored.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>pattern</strong> (<em>str</em>) – The sub string pattern which identifies the files to be deleted.</p></li> +<li><p><strong>inputdir</strong> (<em>str</em><em>, </em><em>optional</em>) – Path to the directory where the retrieved data is stored.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="get_mars_data.write_reqheader"> -<code class="descclassname">get_mars_data.</code><code class="descname">write_reqheader</code><span class="sig-paren">(</span><em>marsfile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#write_reqheader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.write_reqheader" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">get_mars_data.</code><code class="sig-name descname">write_reqheader</code><span class="sig-paren">(</span><em class="sig-param">marsfile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/get_mars_data.html#write_reqheader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#get_mars_data.write_reqheader" title="Permalink to this definition">¶</a></dt> <dd><p>Writes header with column names into mars request file.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>marsfile</strong> (<em>str</em>) – Path to the mars request file.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>marsfile</strong> (<em>str</em>) – Path to the mars request file.</p> +</dd> +</dl> </dd></dl> </div> @@ -2933,8 +2454,8 @@ where xx should be 2 arbitrary letters (mostly xx is chosen to be “EN”).</p> functions:</p> <blockquote> <div><ul class="simple"> -<li>main</li> -<li>prepare_flexpart</li> +<li><p>main</p></li> +<li><p>prepare_flexpart</p></li> </ul> </div></blockquote> <p>Type: prepare_flexpart.py –help @@ -2942,7 +2463,7 @@ to get information about command line parameters. Read the documentation for usage instructions.</p> <dl class="function"> <dt id="prepare_flexpart.main"> -<code class="descclassname">prepare_flexpart.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/prepare_flexpart.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#prepare_flexpart.main" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">prepare_flexpart.</code><code class="sig-name descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/prepare_flexpart.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#prepare_flexpart.main" title="Permalink to this definition">¶</a></dt> <dd><p>Controls the program to prepare flexpart input files from mars data.</p> <p>This is done if it is called directly from command line. Then it also takes program call arguments and control file input.</p> @@ -2950,26 +2471,22 @@ Then it also takes program call arguments and control file input.</p> <dl class="function"> <dt id="prepare_flexpart.prepare_flexpart"> -<code class="descclassname">prepare_flexpart.</code><code class="descname">prepare_flexpart</code><span class="sig-paren">(</span><em>ppid</em>, <em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/prepare_flexpart.html#prepare_flexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#prepare_flexpart.prepare_flexpart" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">prepare_flexpart.</code><code class="sig-name descname">prepare_flexpart</code><span class="sig-paren">(</span><em class="sig-param">ppid</em>, <em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/prepare_flexpart.html#prepare_flexpart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#prepare_flexpart.prepare_flexpart" title="Permalink to this definition">¶</a></dt> <dd><p>Converts the mars data into flexpart ready input files.</p> <p>Specific data fields are converted to a different grid and the flux data are going to be disaggregated. The data fields are collected by hour and stored in a file with a specific FLEXPART relevant naming convention.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ppid</strong> (<em>int</em>) – Contains the ppid number of the current ECMWF job. It will be None if -the method was called within this module.</li> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ppid</strong> (<em>int</em>) – Contains the ppid number of the current ECMWF job. It will be None if +the method was called within this module.</p></li> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> </div> @@ -2978,509 +2495,449 @@ command line.</li> <p>This module contains a collection of diverse tasks within flex_extract.</p> <dl class="function"> <dt id="tools.clean_up"> -<code class="descclassname">tools.</code><code class="descname">clean_up</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#clean_up"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.clean_up" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">clean_up</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#clean_up"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.clean_up" title="Permalink to this definition">¶</a></dt> <dd><p>Remove files from the intermediate directory (inputdir).</p> <p>It keeps the final FLEXPART input files if program runs without ECMWF Api and keywords “ectrans” or “ecstorage” are set to “1”.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.execute_subprocess"> -<code class="descclassname">tools.</code><code class="descname">execute_subprocess</code><span class="sig-paren">(</span><em>cmd_list</em>, <em>error_msg='SUBPROCESS FAILED!'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#execute_subprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.execute_subprocess" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">execute_subprocess</code><span class="sig-paren">(</span><em class="sig-param">cmd_list</em>, <em class="sig-param">error_msg='SUBPROCESS FAILED!'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#execute_subprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.execute_subprocess" title="Permalink to this definition">¶</a></dt> <dd><p>Executes a command line instruction via a subprocess.</p> <p>Error handling is done if an error occures.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cmd_list</strong> (<em>list of str</em>) – A list of the components for the command line execution. Each +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>cmd_list</strong> (<em>list of str</em>) – A list of the components for the command line execution. Each list entry is a single part of the command which is seperated from the rest by a blank space. -E.g. [‘mv’, file1, file2]</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>error_msg</strong> – The possible error message if the subprocess failed. -By default it will just tell “SUBPROCESS FAILED!”.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str, optional</td> -</tr> -</tbody> -</table> +E.g. [‘mv’, file1, file2]</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>error_msg</strong> – The possible error message if the subprocess failed. +By default it will just tell “SUBPROCESS FAILED!”.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str, optional</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.generate_retrieval_period_boundary"> -<code class="descclassname">tools.</code><code class="descname">generate_retrieval_period_boundary</code><span class="sig-paren">(</span><em>c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#generate_retrieval_period_boundary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.generate_retrieval_period_boundary" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">generate_retrieval_period_boundary</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#generate_retrieval_period_boundary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.generate_retrieval_period_boundary" title="Permalink to this definition">¶</a></dt> <dd><p>Generates retrieval period boundary datetimes from CONTROL information.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><ul class="simple"> -<li><strong>start_period</strong> (<em>datetime</em>) – The first timestamp of the actual retrieval period disregarding -the temporary times which were used for processing reasons.</li> -<li><strong>end_period</strong> (<em>datetime</em>) – The last timestamp of the actual retrieval period disregarding -the temporary times which were used for processing reasons.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>start_period</strong> (<em>datetime</em>) – The first timestamp of the actual retrieval period disregarding +the temporary times which were used for processing reasons.</p></li> +<li><p><strong>end_period</strong> (<em>datetime</em>) – The last timestamp of the actual retrieval period disregarding +the temporary times which were used for processing reasons.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.get_cmdline_args"> -<code class="descclassname">tools.</code><code class="descname">get_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_cmdline_args" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">get_cmdline_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_cmdline_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_cmdline_args" title="Permalink to this definition">¶</a></dt> <dd><p>Decomposes the command line arguments and assigns them to variables. Apply default values for non mentioned arguments.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><strong>args</strong> – Contains the commandline arguments from script/program call.</td> -</tr> -<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Namespace</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Returns</dt> +<dd class="field-odd"><p><strong>args</strong> – Contains the commandline arguments from script/program call.</p> +</dd> +<dt class="field-even">Return type</dt> +<dd class="field-even"><p>Namespace</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.get_dimensions"> -<code class="descclassname">tools.</code><code class="descname">get_dimensions</code><span class="sig-paren">(</span><em>info</em>, <em>purefc</em>, <em>dtime</em>, <em>index_vals</em>, <em>start_date</em>, <em>end_date</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_dimensions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_dimensions" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">get_dimensions</code><span class="sig-paren">(</span><em class="sig-param">info</em>, <em class="sig-param">purefc</em>, <em class="sig-param">dtime</em>, <em class="sig-param">index_vals</em>, <em class="sig-param">start_date</em>, <em class="sig-param">end_date</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_dimensions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_dimensions" title="Permalink to this definition">¶</a></dt> <dd><p>This function specifies the correct dimensions for x, y and t.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>info</strong> (<em>dict</em>) – Contains basic informations of the ECMWF grib files, e.g. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>info</strong> (<em>dict</em>) – Contains basic informations of the ECMWF grib files, e.g. ‘Ni’, ‘Nj’, ‘latitudeOfFirstGridPointInDegrees’, ‘longitudeOfFirstGridPointInDegrees’, ‘latitudeOfLastGridPointInDegrees’, ‘longitudeOfLastGridPointInDegrees’, ‘jDirectionIncrementInDegrees’, -‘iDirectionIncrementInDegrees’, ‘missingValue’</li> -<li><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</li> -<li><strong>dtime</strong> (<em>str</em>) – Time step in hours.</li> -<li><strong>index_vals</strong> (<em>list of list of str</em>) – Contains the values from the keys used for a distinct selection +‘iDirectionIncrementInDegrees’, ‘missingValue’</p></li> +<li><p><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</p></li> +<li><p><strong>dtime</strong> (<em>str</em>) – Time step in hours.</p></li> +<li><p><strong>index_vals</strong> (<em>list of list of str</em>) – Contains the values from the keys used for a distinct selection of grib messages in processing the grib files. Content looks like e.g.: index_vals[0]: (‘20171106’, ‘20171107’, ‘20171108’) ; date index_vals[1]: (‘0’, ‘1200’, ‘1800’, ‘600’) ; time -index_vals[2]: (‘0’, ‘12’, ‘3’, ‘6’, ‘9’) ; stepRange</li> -<li><strong>start_date</strong> (<em>str</em>) – The start date of the retrieval job.</li> -<li><strong>end_date</strong> (<em>str</em>) – The end date of the retrieval job.</li> +index_vals[2]: (‘0’, ‘12’, ‘3’, ‘6’, ‘9’) ; stepRange</p></li> +<li><p><strong>start_date</strong> (<em>str</em>) – The start date of the retrieval job.</p></li> +<li><p><strong>end_date</strong> (<em>str</em>) – The end date of the retrieval job.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>(ix, jy, it)</strong> – Dimension in x-direction, y-direction and in time.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">tuple of int</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>(ix, jy, it)</strong> – Dimension in x-direction, y-direction and in time.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>tuple of int</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.get_informations"> -<code class="descclassname">tools.</code><code class="descname">get_informations</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_informations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_informations" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">get_informations</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_informations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_informations" title="Permalink to this definition">¶</a></dt> <dd><p>Gets basic information from an example grib file.</p> <p>These information are important for later use and the initialization of numpy arrays for data storing.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) – Name of the file which will be opened to extract basic information.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>data</strong> – Contains basic informations of the ECMWF grib files, e.g. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) – Name of the file which will be opened to extract basic information.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>data</strong> – Contains basic informations of the ECMWF grib files, e.g. ‘Ni’, ‘Nj’, ‘latitudeOfFirstGridPointInDegrees’, ‘longitudeOfFirstGridPointInDegrees’, ‘latitudeOfLastGridPointInDegrees’, ‘longitudeOfLastGridPointInDegrees’, ‘jDirectionIncrementInDegrees’, -‘iDirectionIncrementInDegrees’, ‘missingValue’</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> -</tr> -</tbody> -</table> +‘iDirectionIncrementInDegrees’, ‘missingValue’</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>dict</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.get_list_as_string"> -<code class="descclassname">tools.</code><code class="descname">get_list_as_string</code><span class="sig-paren">(</span><em>list_obj</em>, <em>concatenate_sign='</em>, <em>'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_list_as_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_list_as_string" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">get_list_as_string</code><span class="sig-paren">(</span><em class="sig-param">list_obj</em>, <em class="sig-param">concatenate_sign='</em>, <em class="sig-param">'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#get_list_as_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.get_list_as_string" title="Permalink to this definition">¶</a></dt> <dd><p>Converts a list of arbitrary content into a single string.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>list_obj</strong> (<em>list of *</em>) – A list with arbitrary content.</li> -<li><strong>concatenate_sign</strong> (<em>str</em><em>, </em><em>optional</em>) – A string which is used to concatenate the single -list elements. Default value is “, “.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>list_obj</strong> (<em>list of *</em>) – A list with arbitrary content.</p></li> +<li><p><strong>concatenate_sign</strong> (<em>str</em><em>, </em><em>optional</em>) – A string which is used to concatenate the single +list elements. Default value is “, “.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>str_of_list</strong> – The content of the list as a single string.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>str_of_list</strong> – The content of the list as a single string.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.init128"> -<code class="descclassname">tools.</code><code class="descname">init128</code><span class="sig-paren">(</span><em>filepath</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#init128"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.init128" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">init128</code><span class="sig-paren">(</span><em class="sig-param">filepath</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#init128"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.init128" title="Permalink to this definition">¶</a></dt> <dd><p>Opens and reads the grib file with table 128 information.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filepath</strong> (<em>str</em>) – Path to file of ECMWF grib table number 128.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>table128</strong> – Contains the ECMWF grib table 128 information. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>filepath</strong> (<em>str</em>) – Path to file of ECMWF grib table number 128.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>table128</strong> – Contains the ECMWF grib table 128 information. The key is the parameter number and the value is the -short name of the parameter.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> -</tr> -</tbody> -</table> +short name of the parameter.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>dict</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.make_dir"> -<code class="descclassname">tools.</code><code class="descname">make_dir</code><span class="sig-paren">(</span><em>directory</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#make_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.make_dir" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">make_dir</code><span class="sig-paren">(</span><em class="sig-param">directory</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#make_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.make_dir" title="Permalink to this definition">¶</a></dt> <dd><p>Creates a directory.</p> <p>It gives a warning if the directory already exists and skips process. The program stops only if there is another problem.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>directory</strong> (<em>str</em>) – The path to directory which should be created.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>directory</strong> (<em>str</em>) – The path to directory which should be created.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.my_error"> -<code class="descclassname">tools.</code><code class="descname">my_error</code><span class="sig-paren">(</span><em>message='ERROR'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#my_error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.my_error" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">my_error</code><span class="sig-paren">(</span><em class="sig-param">message='ERROR'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#my_error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.my_error" title="Permalink to this definition">¶</a></dt> <dd><p>Prints a specified error message which can be passed to the function before exiting the program.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Error message. Default value is “ERROR”.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Error message. Default value is “ERROR”.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.none_or_int"> -<code class="descclassname">tools.</code><code class="descname">none_or_int</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#none_or_int"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.none_or_int" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">none_or_int</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#none_or_int"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.none_or_int" title="Permalink to this definition">¶</a></dt> <dd><p>Converts the input string into pythons None-type if the string contains string “None”. Otherwise it is converted to an integer value.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Return depends on the content of the input value. If it was “None”, +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p>Return depends on the content of the input value. If it was “None”, then the python type None is returned. Otherwise the string is -converted into an integer value.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None or int(value)</td> -</tr> -</tbody> -</table> +converted into an integer value.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>None or int(value)</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.none_or_str"> -<code class="descclassname">tools.</code><code class="descname">none_or_str</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#none_or_str"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.none_or_str" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">none_or_str</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#none_or_str"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.none_or_str" title="Permalink to this definition">¶</a></dt> <dd><p>Converts the input string into pythons None-type if the string contains string “None”.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Return depends on the content of the input value. If it was “None”, -then the python type None is returned. Otherwise the string itself.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None or value</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>value</strong> (<em>str</em>) – String to be checked for the “None” word.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p>Return depends on the content of the input value. If it was “None”, +then the python type None is returned. Otherwise the string itself.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>None or value</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.normal_exit"> -<code class="descclassname">tools.</code><code class="descname">normal_exit</code><span class="sig-paren">(</span><em>message='Done!'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#normal_exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.normal_exit" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">normal_exit</code><span class="sig-paren">(</span><em class="sig-param">message='Done!'</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#normal_exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.normal_exit" title="Permalink to this definition">¶</a></dt> <dd><p>Prints a specific exit message which can be passed to the function.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.product"> -<code class="descclassname">tools.</code><code class="descname">product</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwds</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#product"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.product" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">product</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwds</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#product"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.product" title="Permalink to this definition">¶</a></dt> <dd><p>Creates combinations of all passed arguments.</p> <p>This method combines the single characters of the passed arguments with each other. So that each character of each argument value will be combined with each character of the other arguments as a tuple.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> +<p class="admonition-title">Note</p> <p>This method is taken from an example at the ECMWF wiki website. <a class="reference external" href="https://software.ecmwf.int/wiki/display/GRIB/index.py">https://software.ecmwf.int/wiki/display/GRIB/index.py</a>; 2018-03-16</p> -<p class="last">It was released under the following license: +<p>It was released under the following license: <a class="reference external" href="https://confluence.ecmwf.int/display/ECC/License">https://confluence.ecmwf.int/display/ECC/License</a></p> </div> <p class="rubric">Example</p> <p>product(‘ABCD’, ‘xy’) –> Ax Ay Bx By Cx Cy Dx Dy</p> <p>product(range(2), repeat = 3) –> 000 001 010 011 100 101 110 111</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>*args</strong> (<em>list</em><em> or </em><em>str</em>) – Positional arguments (arbitrary number).</li> -<li><strong>**kwds</strong> (<em>dict</em>) – Contains all the keyword arguments from *args.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>*args</strong> (<em>list</em><em> or </em><em>str</em>) – Positional arguments (arbitrary number).</p></li> +<li><p><strong>**kwds</strong> (<em>dict</em>) – Contains all the keyword arguments from *args.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>prod</strong> – Return will be done with “yield”. A tuple of combined arguments. +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>prod</strong> – Return will be done with “yield”. A tuple of combined arguments. See example in description above.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tuple</span></code></p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">tuple</span></code></p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.put_file_to_ecserver"> -<code class="descclassname">tools.</code><code class="descname">put_file_to_ecserver</code><span class="sig-paren">(</span><em>ecd</em>, <em>filename</em>, <em>target</em>, <em>ecuid</em>, <em>ecgid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#put_file_to_ecserver"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.put_file_to_ecserver" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">put_file_to_ecserver</code><span class="sig-paren">(</span><em class="sig-param">ecd</em>, <em class="sig-param">filename</em>, <em class="sig-param">target</em>, <em class="sig-param">ecuid</em>, <em class="sig-param">ecgid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#put_file_to_ecserver"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.put_file_to_ecserver" title="Permalink to this definition">¶</a></dt> <dd><p>Uses the ecaccess-file-put command to send a file to the ECMWF servers.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">The return value is just for testing reasons. It does not have +<p class="admonition-title">Note</p> +<p>The return value is just for testing reasons. It does not have to be used from the calling function since the whole error handling is done in here.</p> </div> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>ecd</strong> (<em>str</em>) – The path were the file is stored.</li> -<li><strong>filename</strong> (<em>str</em>) – The name of the file to send to the ECMWF server.</li> -<li><strong>target</strong> (<em>str</em>) – The target queue where the file should be sent to.</li> -<li><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</li> -<li><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ecd</strong> (<em>str</em>) – The path were the file is stored.</p></li> +<li><p><strong>filename</strong> (<em>str</em>) – The name of the file to send to the ECMWF server.</p></li> +<li><p><strong>target</strong> (<em>str</em>) – The target queue where the file should be sent to.</p></li> +<li><p><strong>ecuid</strong> (<em>str</em>) – The user id on ECMWF server.</p></li> +<li><p><strong>ecgid</strong> (<em>str</em>) – The group id on ECMWF server.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.read_ecenv"> -<code class="descclassname">tools.</code><code class="descname">read_ecenv</code><span class="sig-paren">(</span><em>filepath</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#read_ecenv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.read_ecenv" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">read_ecenv</code><span class="sig-paren">(</span><em class="sig-param">filepath</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#read_ecenv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.read_ecenv" title="Permalink to this definition">¶</a></dt> <dd><p>Reads the file into a dictionary where the key values are the parameter names.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filepath</strong> (<em>str</em>) – Path to file where the ECMWF environment parameters are stored.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>envs</strong> – Contains the environment parameter ecuid, ecgid, gateway -and destination for ECMWF server environments.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">dict</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>filepath</strong> (<em>str</em>) – Path to file where the ECMWF environment parameters are stored.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>envs</strong> – Contains the environment parameter ecuid, ecgid, gateway +and destination for ECMWF server environments.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>dict</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.send_mail"> -<code class="descclassname">tools.</code><code class="descname">send_mail</code><span class="sig-paren">(</span><em>users</em>, <em>success_mode</em>, <em>message</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#send_mail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.send_mail" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">send_mail</code><span class="sig-paren">(</span><em class="sig-param">users</em>, <em class="sig-param">success_mode</em>, <em class="sig-param">message</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#send_mail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.send_mail" title="Permalink to this definition">¶</a></dt> <dd><p>Prints a specific exit message which can be passed to the function.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>users</strong> (<em>list of str</em>) – Contains all email addresses which should be notified. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>users</strong> (<em>list of str</em>) – Contains all email addresses which should be notified. It might also contain just the ecmwf user name which wil trigger -mailing to the associated email address for this user.</li> -<li><strong>success_mode</strong> (<em>str</em>) – States the exit mode of the program to put into -the mail subject line.</li> -<li><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</li> +mailing to the associated email address for this user.</p></li> +<li><p><strong>success_mode</strong> (<em>str</em>) – States the exit mode of the program to put into +the mail subject line.</p></li> +<li><p><strong>message</strong> (<em>str</em><em>, </em><em>optional</em>) – Message for exiting program. Default value is “Done!”.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.setup_controldata"> -<code class="descclassname">tools.</code><code class="descname">setup_controldata</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#setup_controldata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.setup_controldata" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">setup_controldata</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#setup_controldata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.setup_controldata" title="Permalink to this definition">¶</a></dt> <dd><p>Collects, stores and checks controlling arguments from command line, CONTROL file and ECMWF_ENV file.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><ul class="simple"> -<li><strong>c</strong> (<em>ControlFile</em>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>ppid</strong> (<em>str</em>) – Parent process id.</li> -<li><strong>queue</strong> (<em>str</em>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</li> -<li><strong>job_template</strong> (<em>str</em>) – Name of the job template file for submission to ECMWF server.</li> +<dl class="field-list simple"> +<dt class="field-odd">Returns</dt> +<dd class="field-odd"><p><ul class="simple"> +<li><p><strong>c</strong> (<em>ControlFile</em>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>ppid</strong> (<em>str</em>) – Parent process id.</p></li> +<li><p><strong>queue</strong> (<em>str</em>) – Name of queue for submission to ECMWF (e.g. ecgate or cca )</p></li> +<li><p><strong>job_template</strong> (<em>str</em>) – Name of the job template file for submission to ECMWF server.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.silent_remove"> -<code class="descclassname">tools.</code><code class="descname">silent_remove</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#silent_remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.silent_remove" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">silent_remove</code><span class="sig-paren">(</span><em class="sig-param">filename</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#silent_remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.silent_remove" title="Permalink to this definition">¶</a></dt> <dd><p>Remove file if it exists. The function does not fail if the file does not exist.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) – The name of the file to be removed without notification.</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) – The name of the file to be removed without notification.</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.submit_job_to_ecserver"> -<code class="descclassname">tools.</code><code class="descname">submit_job_to_ecserver</code><span class="sig-paren">(</span><em>target</em>, <em>jobname</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#submit_job_to_ecserver"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.submit_job_to_ecserver" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">submit_job_to_ecserver</code><span class="sig-paren">(</span><em class="sig-param">target</em>, <em class="sig-param">jobname</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#submit_job_to_ecserver"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.submit_job_to_ecserver" title="Permalink to this definition">¶</a></dt> <dd><p>Uses ecaccess-job-submit command to submit a job to the ECMWF server.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">The return value is just for testing reasons. It does not have +<p class="admonition-title">Note</p> +<p>The return value is just for testing reasons. It does not have to be used from the calling function since the whole error handling is done in here.</p> </div> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>target</strong> (<em>str</em>) – The target where the file should be sent to, e.g. the queue.</li> -<li><strong>jobname</strong> (<em>str</em>) – The name of the jobfile to be submitted to the ECMWF server.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>target</strong> (<em>str</em>) – The target where the file should be sent to, e.g. the queue.</p></li> +<li><p><strong>jobname</strong> (<em>str</em>) – The name of the jobfile to be submitted to the ECMWF server.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>job_id</strong> – The id number of the job as a reference at the ecmwf server.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">int</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>job_id</strong> – The id number of the job as a reference at the ecmwf server.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.to_param_id"> -<code class="descclassname">tools.</code><code class="descname">to_param_id</code><span class="sig-paren">(</span><em>pars</em>, <em>table</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#to_param_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.to_param_id" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">to_param_id</code><span class="sig-paren">(</span><em class="sig-param">pars</em>, <em class="sig-param">table</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#to_param_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.to_param_id" title="Permalink to this definition">¶</a></dt> <dd><p>Transform parameter names to parameter ids with ECMWF grib table 128.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>pars</strong> (<em>str</em>) – Addpar argument from CONTROL file in the format of +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>pars</strong> (<em>str</em>) – Addpar argument from CONTROL file in the format of parameter names instead of ids. The parameter short names are sepearted with “/” and they are passed as -one single string.</li> -<li><strong>table</strong> (<em>dict</em>) – Contains the ECMWF grib table 128 information. +one single string.</p></li> +<li><p><strong>table</strong> (<em>dict</em>) – Contains the ECMWF grib table 128 information. The key is the parameter number and the value is the -short name of the parameter.</li> +short name of the parameter.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>ipar</strong> – List of addpar parameters from CONTROL file transformed to +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>ipar</strong> – List of addpar parameters from CONTROL file transformed to parameter ids in the format of integer.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">list of int</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of int</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="tools.to_param_id_with_tablenumber"> -<code class="descclassname">tools.</code><code class="descname">to_param_id_with_tablenumber</code><span class="sig-paren">(</span><em>pars</em>, <em>table</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#to_param_id_with_tablenumber"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.to_param_id_with_tablenumber" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">tools.</code><code class="sig-name descname">to_param_id_with_tablenumber</code><span class="sig-paren">(</span><em class="sig-param">pars</em>, <em class="sig-param">table</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/tools.html#to_param_id_with_tablenumber"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#tools.to_param_id_with_tablenumber" title="Permalink to this definition">¶</a></dt> <dd><p>Transform parameter names to parameter ids and add table id.</p> <p>Conversion with ECMWF grib table 128.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>pars</strong> (<em>str</em>) – Addpar argument from CONTROL file in the format of +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>pars</strong> (<em>str</em>) – Addpar argument from CONTROL file in the format of parameter names instead of ids. The parameter short names are sepearted with “/” and they are passed as -one single string.</li> -<li><strong>table</strong> (<em>dict</em>) – Contains the ECMWF grib table 128 information. +one single string.</p></li> +<li><p><strong>table</strong> (<em>dict</em>) – Contains the ECMWF grib table 128 information. The key is the parameter number and the value is the -short name of the parameter.</li> +short name of the parameter.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>spar</strong> – List of addpar parameters from CONTROL file transformed to +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>spar</strong> – List of addpar parameters from CONTROL file transformed to parameter ids in the format of integer.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> </div> @@ -3489,106 +2946,93 @@ parameter ids in the format of integer.</p> <p>This module contains check methods for the CONTROL paramaters.</p> <dl class="function"> <dt id="checks.check_accmaxstep"> -<code class="descclassname">checks.</code><code class="descname">check_accmaxstep</code><span class="sig-paren">(</span><em>accmaxstep</em>, <em>marsclass</em>, <em>purefc</em>, <em>maxstep</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_accmaxstep"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_accmaxstep" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_accmaxstep</code><span class="sig-paren">(</span><em class="sig-param">accmaxstep</em>, <em class="sig-param">marsclass</em>, <em class="sig-param">purefc</em>, <em class="sig-param">maxstep</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_accmaxstep"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_accmaxstep" title="Permalink to this definition">¶</a></dt> <dd><p>Guarantees that the accumulation forecast step were set.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>accmaxstep</strong> (<em>str</em>) – The maximum forecast step for the accumulated forecast fields.</li> -<li><strong>marsclass</strong> (<em>str</em>) – ECMWF data classification identifier.</li> -<li><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</li> -<li><strong>maxstep</strong> (<em>str</em>) – The maximum forecast time step in hours from the forecast base time. -This is the maximum step for non flux (accumulated) forecast data.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>accmaxstep</strong> (<em>str</em>) – The maximum forecast step for the accumulated forecast fields.</p></li> +<li><p><strong>marsclass</strong> (<em>str</em>) – ECMWF data classification identifier.</p></li> +<li><p><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</p></li> +<li><p><strong>maxstep</strong> (<em>str</em>) – The maximum forecast time step in hours from the forecast base time. +This is the maximum step for non flux (accumulated) forecast data.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>accmaxstep</strong> – The maximum forecast step for the accumulated forecast fields.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>accmaxstep</strong> – The maximum forecast step for the accumulated forecast fields.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_acctime"> -<code class="descclassname">checks.</code><code class="descname">check_acctime</code><span class="sig-paren">(</span><em>acctime</em>, <em>marsclass</em>, <em>purefc</em>, <em>time</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_acctime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_acctime" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_acctime</code><span class="sig-paren">(</span><em class="sig-param">acctime</em>, <em class="sig-param">marsclass</em>, <em class="sig-param">purefc</em>, <em class="sig-param">time</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_acctime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_acctime" title="Permalink to this definition">¶</a></dt> <dd><p>Guarantees that the accumulation forecast times were set.</p> <p>If it is not set, it tries to set the value for some of the most commonly used data sets. Otherwise it raises an error.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>acctime</strong> (<em>str</em>) – The starting time from the accumulated forecasts.</li> -<li><strong>marsclass</strong> (<em>str</em>) – ECMWF data classification identifier.</li> -<li><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>acctime</strong> (<em>str</em>) – The starting time from the accumulated forecasts.</p></li> +<li><p><strong>marsclass</strong> (<em>str</em>) – ECMWF data classification identifier.</p></li> +<li><p><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>acctime</strong> – The starting time from the accumulated forecasts.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>acctime</strong> – The starting time from the accumulated forecasts.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_acctype"> -<code class="descclassname">checks.</code><code class="descname">check_acctype</code><span class="sig-paren">(</span><em>acctype</em>, <em>ftype</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_acctype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_acctype" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_acctype</code><span class="sig-paren">(</span><em class="sig-param">acctype</em>, <em class="sig-param">ftype</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_acctype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_acctype" title="Permalink to this definition">¶</a></dt> <dd><p>Guarantees that the accumulation field type is set.</p> <p>If not set, it is derivated as in the old method (TYPE[1]).</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>acctype</strong> (<em>str</em>) – The field type for the accumulated forecast fields.</li> -<li><strong>ftype</strong> (<em>list of str</em>) – List of field types.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>acctype</strong> (<em>str</em>) – The field type for the accumulated forecast fields.</p></li> +<li><p><strong>ftype</strong> (<em>list of str</em>) – List of field types.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>acctype</strong> – The field type for the accumulated forecast fields.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>acctype</strong> – The field type for the accumulated forecast fields.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_addpar"> -<code class="descclassname">checks.</code><code class="descname">check_addpar</code><span class="sig-paren">(</span><em>addpar</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_addpar"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_addpar" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_addpar</code><span class="sig-paren">(</span><em class="sig-param">addpar</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_addpar"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_addpar" title="Permalink to this definition">¶</a></dt> <dd><p>Check that addpar has correct format of additional parameters in a single string, so that it can be easily appended to the hard coded parameters that are retrieved in any case.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>addpar</strong> (<em>str</em><em> or </em><em>list of str</em>) – List of additional parameters to be retrieved.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>addpar</strong> – List of additional parameters to be retrieved.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>addpar</strong> (<em>str</em><em> or </em><em>list of str</em>) – List of additional parameters to be retrieved.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>addpar</strong> – List of additional parameters to be retrieved.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_area"> -<code class="descclassname">checks.</code><code class="descname">check_area</code><span class="sig-paren">(</span><em>grid</em>, <em>area</em>, <em>upper</em>, <em>lower</em>, <em>left</em>, <em>right</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_area"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_area" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_area</code><span class="sig-paren">(</span><em class="sig-param">grid</em>, <em class="sig-param">area</em>, <em class="sig-param">upper</em>, <em class="sig-param">lower</em>, <em class="sig-param">left</em>, <em class="sig-param">right</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_area"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_area" title="Permalink to this definition">¶</a></dt> <dd><p>Defines the correct area string.</p> <p>Checks on the format of the four area components. Wether it is of the order of 1000 or 1. Also checks wether area was already set by command @@ -3596,478 +3040,421 @@ line, then the four components are overwritten. Convert to correct format of the order of magnitude “1” and sets the area parameter (North/West/South/East). E.g.: -5./20./10./10.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>grid</strong> (<em>str</em>) – Contains grid information.</li> -<li><strong>area</strong> (<em>str</em>) – Contains area informtion.</li> -<li><strong>upper</strong> (<em>str</em>) – The northern most latitude.</li> -<li><strong>lower</strong> (<em>str</em>) – The souther most latitude.</li> -<li><strong>left</strong> (<em>str</em>) – The western most longitude.</li> -<li><strong>right</strong> (<em>str</em>) – The eastern most longiude.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>grid</strong> (<em>str</em>) – Contains grid information.</p></li> +<li><p><strong>area</strong> (<em>str</em>) – Contains area informtion.</p></li> +<li><p><strong>upper</strong> (<em>str</em>) – The northern most latitude.</p></li> +<li><p><strong>lower</strong> (<em>str</em>) – The souther most latitude.</p></li> +<li><p><strong>left</strong> (<em>str</em>) – The western most longitude.</p></li> +<li><p><strong>right</strong> (<em>str</em>) – The eastern most longiude.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>grid</strong> – Contains grid in format Lat/lon. E.g. 0.1/0.1</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>grid</strong> – Contains grid in format Lat/lon. E.g. 0.1/0.1</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_basetime"> -<code class="descclassname">checks.</code><code class="descname">check_basetime</code><span class="sig-paren">(</span><em>basetime</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_basetime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_basetime" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_basetime</code><span class="sig-paren">(</span><em class="sig-param">basetime</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_basetime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_basetime" title="Permalink to this definition">¶</a></dt> <dd><p>Check if basetime is set and contains one of the two possible values (0, 12).</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>basetime</strong> (<em>int</em><em> or </em><em>str</em><em> or </em><em>None</em>) – The time for a half day retrieval. The 12 hours upfront are to be -retrieved.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>basetime</strong> – The time for a half day retrieval. The 12 hours upfront are to be -retrieved.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">int or None</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>basetime</strong> (<em>int</em><em> or </em><em>str</em><em> or </em><em>None</em>) – The time for a half day retrieval. The 12 hours upfront are to be +retrieved.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>basetime</strong> – The time for a half day retrieval. The 12 hours upfront are to be +retrieved.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>int or None</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_dates"> -<code class="descclassname">checks.</code><code class="descname">check_dates</code><span class="sig-paren">(</span><em>start</em>, <em>end</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_dates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_dates" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_dates</code><span class="sig-paren">(</span><em class="sig-param">start</em>, <em class="sig-param">end</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_dates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_dates" title="Permalink to this definition">¶</a></dt> <dd><p>Checks if there is at least a start date for a one day retrieval.</p> <p>Checks if end date lies after start date and end date is set.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>start</strong> (<em>str</em>) – The start date of the retrieval job.</li> -<li><strong>end</strong> (<em>str</em>) – The end date of the retrieval job.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>start</strong> (<em>str</em>) – The start date of the retrieval job.</p></li> +<li><p><strong>end</strong> (<em>str</em>) – The end date of the retrieval job.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> -<li><strong>start</strong> (<em>str</em>) – The start date of the retrieval job.</li> -<li><strong>end</strong> (<em>str</em>) – The end date of the retrieval job.</li> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>start</strong> (<em>str</em>) – The start date of the retrieval job.</p></li> +<li><p><strong>end</strong> (<em>str</em>) – The end date of the retrieval job.</p></li> </ul> </p> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_grid"> -<code class="descclassname">checks.</code><code class="descname">check_grid</code><span class="sig-paren">(</span><em>grid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_grid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_grid" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_grid</code><span class="sig-paren">(</span><em class="sig-param">grid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_grid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_grid" title="Permalink to this definition">¶</a></dt> <dd><p>Convert grid into correct Lat/Lon format. E.g. ‘0.5/0.5’</p> <p>Checks on format of original grid. Wether it is in the order of 1000 or 1. Convert to correct grid format and substitute into “Lat/Lon” format string.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>grid</strong> (<em>str</em>) – Contains grid information</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>grid</strong> – Contains grid in format Lat/lon. E.g. 0.1/0.1</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>grid</strong> (<em>str</em>) – Contains grid information</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>grid</strong> – Contains grid in format Lat/lon. E.g. 0.1/0.1</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_job_chunk"> -<code class="descclassname">checks.</code><code class="descname">check_job_chunk</code><span class="sig-paren">(</span><em>job_chunk</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_job_chunk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_job_chunk" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_job_chunk</code><span class="sig-paren">(</span><em class="sig-param">job_chunk</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_job_chunk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_job_chunk" title="Permalink to this definition">¶</a></dt> <dd><p>Checks that if job chunk is set, the number is positive and non zero.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>job_chunk</strong> (<em>int</em>) – The number of days for a single job script.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>job_chunk</strong> – The number of days for a single job script.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">int</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>job_chunk</strong> (<em>int</em>) – The number of days for a single job script.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>job_chunk</strong> – The number of days for a single job script.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_len_type_time_step"> -<code class="descclassname">checks.</code><code class="descname">check_len_type_time_step</code><span class="sig-paren">(</span><em>ftype</em>, <em>ftime</em>, <em>steps</em>, <em>maxstep</em>, <em>purefc</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_len_type_time_step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_len_type_time_step" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_len_type_time_step</code><span class="sig-paren">(</span><em class="sig-param">ftype</em>, <em class="sig-param">ftime</em>, <em class="sig-param">steps</em>, <em class="sig-param">maxstep</em>, <em class="sig-param">purefc</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_len_type_time_step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_len_type_time_step" title="Permalink to this definition">¶</a></dt> <dd><p>Check if</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>ftype</strong> (<em>list of str</em>) – List of field types.</li> -<li><strong>ftime</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</li> -<li><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. -Valid values are hours (HH) from forecast base time.</li> -<li><strong>maxstep</strong> (<em>int</em>) – The maximum forecast time step in hours from the forecast base time. -This is the maximum step for non flux (accumulated) forecast data.</li> -<li><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ftype</strong> (<em>list of str</em>) – List of field types.</p></li> +<li><p><strong>ftime</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</p></li> +<li><p><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. +Valid values are hours (HH) from forecast base time.</p></li> +<li><p><strong>maxstep</strong> (<em>int</em>) – The maximum forecast time step in hours from the forecast base time. +This is the maximum step for non flux (accumulated) forecast data.</p></li> +<li><p><strong>purefc</strong> (<em>int</em>) – Switch for definition of pure forecast mode or not.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> -<li><strong>ftype</strong> (<em>list of str</em>) – List of field types.</li> -<li><strong>ftime</strong> (<em>list of str</em>) – The time in hours of the field.</li> -<li><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. -Valid values are hours (HH) from forecast base time.</li> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>ftype</strong> (<em>list of str</em>) – List of field types.</p></li> +<li><p><strong>ftime</strong> (<em>list of str</em>) – The time in hours of the field.</p></li> +<li><p><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. +Valid values are hours (HH) from forecast base time.</p></li> </ul> </p> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_levels"> -<code class="descclassname">checks.</code><code class="descname">check_levels</code><span class="sig-paren">(</span><em>levelist</em>, <em>level</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_levels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_levels" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_levels</code><span class="sig-paren">(</span><em class="sig-param">levelist</em>, <em class="sig-param">level</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_levels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_levels" title="Permalink to this definition">¶</a></dt> <dd><p>Defines correct level list and guarantees that the maximum level is one of the available maximum levels.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>levelist</strong> (<em>str</em>) – Specifies the level list. -Examples: model level: 1/to/137, pressure levels: 500/to/1000</li> -<li><strong>level</strong> (<em>str</em>) – Specifies the maximum level.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>levelist</strong> (<em>str</em>) – Specifies the level list. +Examples: model level: 1/to/137, pressure levels: 500/to/1000</p></li> +<li><p><strong>level</strong> (<em>str</em>) – Specifies the maximum level.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> -<li><strong>levelist</strong> (<em>str</em>) – Specifies the required levels. It has to have a valid +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>levelist</strong> (<em>str</em>) – Specifies the required levels. It has to have a valid correspondence to the selected levtype. -Examples: model level: 1/to/137, pressure levels: 500/to/1000</li> -<li><strong>level</strong> (<em>str</em>) – Specifies the maximum level. It has to be one of the +Examples: model level: 1/to/137, pressure levels: 500/to/1000</p></li> +<li><p><strong>level</strong> (<em>str</em>) – Specifies the maximum level. It has to be one of the available maximum level number as contained in the variable -MAX_LEVEL_LIST in “_config”. E.g. [16, 19, 31, 40, 50, 60, 62, 91, 137]</li> +MAX_LEVEL_LIST in “_config”. E.g. [16, 19, 31, 40, 50, 60, 62, 91, 137]</p></li> </ul> </p> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_logicals_type"> -<code class="descclassname">checks.</code><code class="descname">check_logicals_type</code><span class="sig-paren">(</span><em>c</em>, <em>logicals</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_logicals_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_logicals_type" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_logicals_type</code><span class="sig-paren">(</span><em class="sig-param">c</em>, <em class="sig-param">logicals</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_logicals_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_logicals_type" title="Permalink to this definition">¶</a></dt> <dd><p>Check that the logical variables have correct type integer.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>logicals</strong> (<em>list of</em><em> (</em><em>str</em><em> or </em><em>int</em><em>)</em>) – Names of the switches that are used to control the flow of the -program.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>logicals</strong> (<em>list of</em><em> (</em><em>str</em><em> or </em><em>int</em><em>)</em>) – Names of the switches that are used to control the flow of the +program.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_mail"> -<code class="descclassname">checks.</code><code class="descname">check_mail</code><span class="sig-paren">(</span><em>mail</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_mail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_mail" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_mail</code><span class="sig-paren">(</span><em class="sig-param">mail</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_mail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_mail" title="Permalink to this definition">¶</a></dt> <dd><p>Check the string of mail addresses, seperate them and convert to a list.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mail</strong> (<em>list of str</em><em> or </em><em>str</em>) – Contains email addresses for notifications. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>mail</strong> (<em>list of str</em><em> or </em><em>str</em>) – Contains email addresses for notifications. It might also contain just the ecmwf user name which will trigger -mailing to the associated email address for this user.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>mail</strong> – Contains email addresses for notifications. +mailing to the associated email address for this user.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>mail</strong> – Contains email addresses for notifications. It might also contain just the ecmwf user name which will trigger -mailing to the associated email address for this user.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +mailing to the associated email address for this user.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_maxstep"> -<code class="descclassname">checks.</code><code class="descname">check_maxstep</code><span class="sig-paren">(</span><em>maxstep</em>, <em>steps</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_maxstep"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_maxstep" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_maxstep</code><span class="sig-paren">(</span><em class="sig-param">maxstep</em>, <em class="sig-param">steps</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_maxstep"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_maxstep" title="Permalink to this definition">¶</a></dt> <dd><p>Convert maxstep into integer if it is already given. Otherwise, select maxstep by going through the steps list.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>maxstep</strong> (<em>str</em>) – The maximum forecast time step in hours from the forecast base time. -This is the maximum step for non flux (accumulated) forecast data.</li> -<li><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. -Valid values are hours (HH) from forecast base time.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>maxstep</strong> (<em>str</em>) – The maximum forecast time step in hours from the forecast base time. +This is the maximum step for non flux (accumulated) forecast data.</p></li> +<li><p><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. +Valid values are hours (HH) from forecast base time.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>maxstep</strong> – The maximum forecast time step in hours from the forecast base time. +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>maxstep</strong> – The maximum forecast time step in hours from the forecast base time. This is the maximum step for non flux (accumulated) forecast data.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">int</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>int</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_number"> -<code class="descclassname">checks.</code><code class="descname">check_number</code><span class="sig-paren">(</span><em>number</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_number"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_number" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_number</code><span class="sig-paren">(</span><em class="sig-param">number</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_number"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_number" title="Permalink to this definition">¶</a></dt> <dd><p>Check for correct string format of ensemble member numbers.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>number</strong> (<em>str</em>) – List of ensemble member forecast runs.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>number</strong> – String with list of ensemble member forecast runs. E.g. ‘01/02/03/04’</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>number</strong> (<em>str</em>) – List of ensemble member forecast runs.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>number</strong> – String with list of ensemble member forecast runs. E.g. ‘01/02/03/04’</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_pathes"> -<code class="descclassname">checks.</code><code class="descname">check_pathes</code><span class="sig-paren">(</span><em>idir</em>, <em>odir</em>, <em>fpdir</em>, <em>fedir</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_pathes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_pathes" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_pathes</code><span class="sig-paren">(</span><em class="sig-param">idir</em>, <em class="sig-param">odir</em>, <em class="sig-param">fpdir</em>, <em class="sig-param">fedir</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_pathes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_pathes" title="Permalink to this definition">¶</a></dt> <dd><p>Check if output and flexpart pathes are set.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>idir</strong> (<em>str</em>) – Path to the temporary directory for MARS retrieval data.</li> -<li><strong>odir</strong> (<em>str</em>) – Path to the final output directory where the FLEXPART input files -will be stored.</li> -<li><strong>fpdir</strong> (<em>str</em>) – Path to FLEXPART root directory.</li> -<li><strong>fedir</strong> (<em>str</em>) – Path to flex_extract root directory.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>idir</strong> (<em>str</em>) – Path to the temporary directory for MARS retrieval data.</p></li> +<li><p><strong>odir</strong> (<em>str</em>) – Path to the final output directory where the FLEXPART input files +will be stored.</p></li> +<li><p><strong>fpdir</strong> (<em>str</em>) – Path to FLEXPART root directory.</p></li> +<li><p><strong>fedir</strong> (<em>str</em>) – Path to flex_extract root directory.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><ul class="simple"> -<li><strong>odir</strong> (<em>str</em>) – Path to the final output directory where the FLEXPART input files -will be stored.</li> -<li><strong>fpdir</strong> (<em>str</em>) – Path to FLEXPART root directory.</li> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><ul class="simple"> +<li><p><strong>odir</strong> (<em>str</em>) – Path to the final output directory where the FLEXPART input files +will be stored.</p></li> +<li><p><strong>fpdir</strong> (<em>str</em>) – Path to FLEXPART root directory.</p></li> </ul> </p> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_ppid"> -<code class="descclassname">checks.</code><code class="descname">check_ppid</code><span class="sig-paren">(</span><em>c</em>, <em>ppid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_ppid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_ppid" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_ppid</code><span class="sig-paren">(</span><em class="sig-param">c</em>, <em class="sig-param">ppid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_ppid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_ppid" title="Permalink to this definition">¶</a></dt> <dd><p>Sets the current PPID.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and -command line.</li> -<li><strong>ppid</strong> (<em>int</em><em> or </em><em>None</em>) – Contains the ppid number provided by the command line parameter -of is None otherwise.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>c</strong> (<a class="reference internal" href="#ControlFile.ControlFile" title="ControlFile.ControlFile"><em>ControlFile</em></a>) – Contains all the parameters of CONTROL file and +command line.</p></li> +<li><p><strong>ppid</strong> (<em>int</em><em> or </em><em>None</em>) – Contains the ppid number provided by the command line parameter +of is None otherwise.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_public"> -<code class="descclassname">checks.</code><code class="descname">check_public</code><span class="sig-paren">(</span><em>public</em>, <em>dataset</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_public"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_public" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_public</code><span class="sig-paren">(</span><em class="sig-param">public</em>, <em class="sig-param">dataset</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_public"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_public" title="Permalink to this definition">¶</a></dt> <dd><p>Check wether the dataset parameter is set for a public data set retrieval.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>public</strong> (<em>int</em>) – Specifies if public data are to be retrieved or not.</li> -<li><strong>dataset</strong> (<em>str</em>) – Specific name which identifies the public dataset.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>public</strong> (<em>int</em>) – Specifies if public data are to be retrieved or not.</p></li> +<li><p><strong>dataset</strong> (<em>str</em>) – Specific name which identifies the public dataset.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_purefc"> -<code class="descclassname">checks.</code><code class="descname">check_purefc</code><span class="sig-paren">(</span><em>ftype</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_purefc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_purefc" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_purefc</code><span class="sig-paren">(</span><em class="sig-param">ftype</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_purefc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_purefc" title="Permalink to this definition">¶</a></dt> <dd><p>Check for a pure forecast mode.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>ftype</strong> (<em>list of str</em>) – List of field types.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">True if pure forecasts are to be retrieved. False if there are -analysis fields in between.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">True or False</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>ftype</strong> (<em>list of str</em>) – List of field types.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p>True if pure forecasts are to be retrieved. False if there are +analysis fields in between.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>True or False</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_queue"> -<code class="descclassname">checks.</code><code class="descname">check_queue</code><span class="sig-paren">(</span><em>queue</em>, <em>gateway</em>, <em>destination</em>, <em>ecuid</em>, <em>ecgid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_queue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_queue" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_queue</code><span class="sig-paren">(</span><em class="sig-param">queue</em>, <em class="sig-param">gateway</em>, <em class="sig-param">destination</em>, <em class="sig-param">ecuid</em>, <em class="sig-param">ecgid</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_queue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_queue" title="Permalink to this definition">¶</a></dt> <dd><p>Check if the necessary ECMWF parameters are set if the queue is one of the QUEUES_LIST (in _config).</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>queue</strong> (<em>str</em>) – Name of the queue if submitted to the ECMWF servers. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>queue</strong> (<em>str</em>) – Name of the queue if submitted to the ECMWF servers. Used to check if ecuid, ecgid, gateway and destination -are set correctly and are not empty.</li> -<li><strong>gateway</strong> (<em>str</em>) – The address of the gateway server.</li> -<li><strong>destination</strong> (<em>str</em>) – The name of the destination of the gateway server for data -transfer through ectrans. E.g. <a class="reference external" href="mailto:name%40genericSftp">name<span>@</span>genericSftp</a></li> -<li><strong>ecuid</strong> (<em>str</em>) – ECMWF user id.</li> -<li><strong>ecgid</strong> (<em>str</em>) – ECMWF group id.</li> +are set correctly and are not empty.</p></li> +<li><p><strong>gateway</strong> (<em>str</em>) – The address of the gateway server.</p></li> +<li><p><strong>destination</strong> (<em>str</em>) – The name of the destination of the gateway server for data +transfer through ectrans. E.g. <a class="reference external" href="mailto:name%40genericSftp">name<span>@</span>genericSftp</a></p></li> +<li><p><strong>ecuid</strong> (<em>str</em>) – ECMWF user id.</p></li> +<li><p><strong>ecgid</strong> (<em>str</em>) – ECMWF group id.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_request"> -<code class="descclassname">checks.</code><code class="descname">check_request</code><span class="sig-paren">(</span><em>request</em>, <em>marsfile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_request" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_request</code><span class="sig-paren">(</span><em class="sig-param">request</em>, <em class="sig-param">marsfile</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_request" title="Permalink to this definition">¶</a></dt> <dd><p>Check if there is an old mars request file and remove it.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>request</strong> (<em>int</em>) – Selects the mode of retrieval. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>request</strong> (<em>int</em>) – Selects the mode of retrieval. 0: Retrieves the data from ECMWF. 1: Prints the mars requests to an output file. -2: Retrieves the data and prints the mars request.</li> -<li><strong>marsfile</strong> (<em>str</em>) – Path to the mars request file.</li> +2: Retrieves the data and prints the mars request.</p></li> +<li><p><strong>marsfile</strong> (<em>str</em>) – Path to the mars request file.</p></li> </ul> -</td> -</tr> -</tbody> -</table> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_step"> -<code class="descclassname">checks.</code><code class="descname">check_step</code><span class="sig-paren">(</span><em>step</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_step" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_step</code><span class="sig-paren">(</span><em class="sig-param">step</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_step" title="Permalink to this definition">¶</a></dt> <dd><p>Checks on step format and convert into a list of steps.</p> <p>If the steps were defined with “to” and “by” they are converted into a list of steps. If the steps were set in a string, it is converted into a list.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>step</strong> (<em>list of str</em><em> or </em><em>str</em>) – Specifies the forecast time step from forecast base time. -Valid values are hours (HH) from forecast base time.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>step</strong> – List of forecast steps in format e.g. [001, 002, …]</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>step</strong> (<em>list of str</em><em> or </em><em>str</em>) – Specifies the forecast time step from forecast base time. +Valid values are hours (HH) from forecast base time.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>step</strong> – List of forecast steps in format e.g. [001, 002, …]</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_time"> -<code class="descclassname">checks.</code><code class="descname">check_time</code><span class="sig-paren">(</span><em>ftime</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_time" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_time</code><span class="sig-paren">(</span><em class="sig-param">ftime</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_time" title="Permalink to this definition">¶</a></dt> <dd><p>Check if time variable is of type list. Otherwise convert to list.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>ftime</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>ftime</strong> – The time in hours of the field.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of str</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>ftime</strong> (<em>list of str</em><em> or </em><em>str</em>) – The time in hours of the field.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>ftime</strong> – The time in hours of the field.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> <dl class="function"> <dt id="checks.check_type"> -<code class="descclassname">checks.</code><code class="descname">check_type</code><span class="sig-paren">(</span><em>ftype</em>, <em>steps</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_type" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">checks.</code><code class="sig-name descname">check_type</code><span class="sig-paren">(</span><em class="sig-param">ftype</em>, <em class="sig-param">steps</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/checks.html#check_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#checks.check_type" title="Permalink to this definition">¶</a></dt> <dd><p>Check if type variable is of type list and if analysis field has forecast step 0.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> -<li><strong>ftype</strong> (<em>list of str</em><em> or </em><em>str</em>) – List of field types.</li> -<li><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. -Valid values are hours (HH) from forecast base time.</li> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>ftype</strong> (<em>list of str</em><em> or </em><em>str</em>) – List of field types.</p></li> +<li><p><strong>steps</strong> (<em>str</em>) – Specifies the forecast time step from forecast base time. +Valid values are hours (HH) from forecast base time.</p></li> </ul> -</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>ftype</strong> – List of field types.</p> -</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">list of str</p> -</td> -</tr> -</tbody> -</table> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>ftype</strong> – List of field types.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of str</p> +</dd> +</dl> </dd></dl> </div> <div class="section" id="module-disaggregation"> <span id="disaggregation"></span><h3><a class="toc-backref" href="#id17">disaggregation</a><a class="headerlink" href="#module-disaggregation" title="Permalink to this headline">¶</a></h3> <p>Disaggregation of deaccumulated flux data from an ECMWF model FG field.</p> -<dl class="docutils"> -<dt>Initially the flux data to be concerned are:</dt> -<dd><ul class="first last simple"> -<li>large-scale precipitation</li> -<li>convective precipitation</li> -<li>surface sensible heat flux</li> -<li>surface solar radiation</li> -<li>u stress</li> -<li>v stress</li> +<dl class="simple"> +<dt>Initially the flux data to be concerned are:</dt><dd><ul class="simple"> +<li><p>large-scale precipitation</p></li> +<li><p>convective precipitation</p></li> +<li><p>surface sensible heat flux</p></li> +<li><p>surface solar radiation</p></li> +<li><p>u stress</p></li> +<li><p>v stress</p></li> </ul> </dd> </dl> @@ -4076,7 +3463,7 @@ data (darain, modified linear) and the surface fluxes and stress data (dapoly, cubic polynomial).</p> <dl class="function"> <dt id="disaggregation.IA3"> -<code class="descclassname">disaggregation.</code><code class="descname">IA3</code><span class="sig-paren">(</span><em>g</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#IA3"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.IA3" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">disaggregation.</code><code class="sig-name descname">IA3</code><span class="sig-paren">(</span><em class="sig-param">g</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#IA3"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.IA3" title="Permalink to this definition">¶</a></dt> <dd><p>Interpolation with a non-negative geometric mean based algorithm.</p> <p>The original grid is reconstructed by adding two sampling points in each data series interval. This subgrid is used to keep all information during @@ -4084,29 +3471,28 @@ the interpolation within the associated interval. Additionally, an advanced monotonicity filter is applied to improve the monotonicity properties of the series.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> +<p class="admonition-title">Note</p> <p>(C) Copyright 2017-2019 Sabine Hittmeir, Anne Philipp, Petra Seibert</p> -<p class="last">This work is licensed under the Creative Commons Attribution 4.0 +<p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit <a class="reference external" href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</a> or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> </div> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>g</strong> (<em>list of float</em>) – Complete data series that will be interpolated having -the dimension of the original raw series.</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>f</strong> – The interpolated data series with additional subgrid points. +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>g</strong> (<em>list of float</em>) – Complete data series that will be interpolated having +the dimension of the original raw series.</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>f</strong> – The interpolated data series with additional subgrid points. Its dimension is equal to the length of the input data series -times three.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list of float</td> -</tr> -</tbody> -</table> +times three.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>list of float</p> +</dd> +</dl> <p class="rubric">References</p> <p>For more information see article: Hittmeir, S.; Philipp, A.; Seibert, P. (2017): A conservative @@ -4117,7 +3503,7 @@ Geoscientific Model Development</p> <dl class="function"> <dt id="disaggregation.dapoly"> -<code class="descclassname">disaggregation.</code><code class="descname">dapoly</code><span class="sig-paren">(</span><em>alist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#dapoly"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.dapoly" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">disaggregation.</code><code class="sig-name descname">dapoly</code><span class="sig-paren">(</span><em class="sig-param">alist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#dapoly"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.dapoly" title="Permalink to this definition">¶</a></dt> <dd><p>Cubic polynomial interpolation of deaccumulated fluxes.</p> <p>Interpolation of deaccumulated fluxes of an ECMWF model FG field using a cubic polynomial solution which conserves the integrals @@ -4127,35 +3513,34 @@ generates a new, disaggregated value which is output at the central point of the 4 accumulation timespans. This new point is used for linear interpolation of the complete timeseries afterwards.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. -E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">array of float</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. +E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>array of float</p> +</dd> +</dl> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<dl class="last docutils"> -<dt>March 2000 <span class="classifier-delimiter">:</span> <span class="classifier">P. JAMES</span></dt> -<dd>Original author</dd> -<dt>June 2003 <span class="classifier-delimiter">:</span> <span class="classifier">A. BECK</span></dt> -<dd>Adaptations</dd> -<dt>November 2015 <span class="classifier-delimiter">:</span> <span class="classifier">Leopold Haimberger (University of Vienna)</span></dt> -<dd>Migration from Fortran to Python</dd> +<p class="admonition-title">Note</p> +<dl class="simple"> +<dt>March 2000<span class="classifier">P. JAMES</span></dt><dd><p>Original author</p> +</dd> +<dt>June 2003<span class="classifier">A. BECK</span></dt><dd><p>Adaptations</p> +</dd> +<dt>November 2015<span class="classifier">Leopold Haimberger (University of Vienna)</span></dt><dd><p>Migration from Fortran to Python</p> +</dd> </dl> </div> </dd></dl> <dl class="function"> <dt id="disaggregation.darain"> -<code class="descclassname">disaggregation.</code><code class="descname">darain</code><span class="sig-paren">(</span><em>alist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#darain"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.darain" title="Permalink to this definition">¶</a></dt> +<code class="sig-prename descclassname">disaggregation.</code><code class="sig-name descname">darain</code><span class="sig-paren">(</span><em class="sig-param">alist</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/disaggregation.html#darain"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#disaggregation.darain" title="Permalink to this definition">¶</a></dt> <dd><p>Linear interpolation of deaccumulated fluxes.</p> <p>Interpolation of deaccumulated fluxes of an ECMWF model FG rainfall field using a modified linear solution which conserves the integrals @@ -4164,28 +3549,27 @@ Disaggregation is done for 4 accumluated timespans which generates a new, disaggregated value which is output at the central point of the 4 accumulation timespans. This new point is used for linear interpolation of the complete timeseries afterwards.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. -E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> -</tr> -<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</td> -</tr> -<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">array of float</td> -</tr> -</tbody> -</table> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><p><strong>alist</strong> (<em>list of array of float</em>) – List of 4 timespans as 2-dimensional, horizontal fields. +E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</p> +</dd> +<dt class="field-even">Returns</dt> +<dd class="field-even"><p><strong>nfield</strong> – Interpolated flux at central point of accumulation timespan.</p> +</dd> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p>array of float</p> +</dd> +</dl> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<dl class="last docutils"> -<dt>March 2000 <span class="classifier-delimiter">:</span> <span class="classifier">P. JAMES</span></dt> -<dd>Original author</dd> -<dt>June 2003 <span class="classifier-delimiter">:</span> <span class="classifier">A. BECK</span></dt> -<dd>Adaptations</dd> -<dt>November 2015 <span class="classifier-delimiter">:</span> <span class="classifier">Leopold Haimberger (University of Vienna)</span></dt> -<dd>Migration from Fortran to Python</dd> +<p class="admonition-title">Note</p> +<dl class="simple"> +<dt>March 2000<span class="classifier">P. JAMES</span></dt><dd><p>Original author</p> +</dd> +<dt>June 2003<span class="classifier">A. BECK</span></dt><dd><p>Adaptations</p> +</dd> +<dt>November 2015<span class="classifier">Leopold Haimberger (University of Vienna)</span></dt><dd><p>Migration from Fortran to Python</p> +</dd> </dl> </div> </dd></dl> @@ -4216,7 +3600,7 @@ E.g. [[array_t1], [array_t2], [array_t3], [array_t4]]</td> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/changes.html b/Documentation/html/Documentation/Input/changes.html index a43223a3721dd8e7b869e0fc7ae41b42d6fd8185..364053201b2a0133d8442dba142790f024883fde 100644 --- a/Documentation/html/Documentation/Input/changes.html +++ b/Documentation/html/Documentation/Input/changes.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -192,15 +192,14 @@ <div class="section" id="control-file-changes"> <h1>CONTROL file changes<a class="headerlink" href="#control-file-changes" title="Permalink to this headline">¶</a></h1> -<dl class="docutils"> -<dt>Changes from version 7.0.4 to version 7.1</dt> -<dd><ul class="first last simple"> -<li>removed <code class="docutils literal notranslate"><span class="pre">M_</span></code> (but is still available for downward compatibility)</li> -<li>grid resolution not in 1/1000 degress anymore (but is still available for downward compatibility)</li> -<li>comments available with <code class="docutils literal notranslate"><span class="pre">#</span></code></li> -<li>only parameters which are needed to override the default values are necessary</li> -<li>number of type/step/time elements do not have to be 24 any more. Just select the interval you need.</li> -<li>the <code class="docutils literal notranslate"><span class="pre">dtime</span></code> parameter needs to be consistent with <code class="docutils literal notranslate"><span class="pre">type/step/time</span></code>. For example <code class="docutils literal notranslate"><span class="pre">dtime</span></code> can be coarser as <code class="docutils literal notranslate"><span class="pre">time</span></code> intervals are available, but not finer.</li> +<dl class="simple"> +<dt>Changes from version 7.0.4 to version 7.1</dt><dd><ul class="simple"> +<li><p>removed <code class="docutils literal notranslate"><span class="pre">M_</span></code> (but is still available for downward compatibility)</p></li> +<li><p>grid resolution not in 1/1000 degress anymore (but is still available for downward compatibility)</p></li> +<li><p>comments available with <code class="docutils literal notranslate"><span class="pre">#</span></code></p></li> +<li><p>only parameters which are needed to override the default values are necessary</p></li> +<li><p>number of type/step/time elements do not have to be 24 any more. Just select the interval you need.</p></li> +<li><p>the <code class="docutils literal notranslate"><span class="pre">dtime</span></code> parameter needs to be consistent with <code class="docutils literal notranslate"><span class="pre">type/step/time</span></code>. For example <code class="docutils literal notranslate"><span class="pre">dtime</span></code> can be coarser as <code class="docutils literal notranslate"><span class="pre">time</span></code> intervals are available, but not finer.</p></li> </ul> </dd> </dl> @@ -228,7 +227,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/compilejob.html b/Documentation/html/Documentation/Input/compilejob.html index c31aa5aaf093fb884b925055b77f9997d97fc0ff..9b7056bd11a817ee968f29c1d7c9e248a56636a3 100644 --- a/Documentation/html/Documentation/Input/compilejob.html +++ b/Documentation/html/Documentation/Input/compilejob.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -38,7 +38,7 @@ <link rel="stylesheet" href="../../_static/css/theme_overrides.css" type="text/css" /> <link rel="index" title="Index" href="../../genindex.html" /> <link rel="search" title="Search" href="../../search.html" /> - <link rel="next" title="The Fortran Makefile - CONVERT2" href="fortran_makefile.html" /> + <link rel="next" title="The Fortran Makefile - calc_etadot" href="fortran_makefile.html" /> <link rel="prev" title="The Installation Script - setup.sh" href="setup.html" /> </head> @@ -101,7 +101,7 @@ <li class="toctree-l4"><a class="reference internal" href="#example-compilejob-ksh">Example <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> </ul> </li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -205,13 +205,13 @@ server system to load the necessary modules for the environment when submitted t <h2>What does the compilation script do?<a class="headerlink" href="#what-does-the-compilation-script-do" title="Permalink to this headline">¶</a></h2> <blockquote> <div><ol class="arabic simple"> -<li>It sets necessary batch system parameters</li> -<li>It prepares the job environment at the ECMWF servers by loading the necessary library modules</li> -<li>It sets some environment variabels for the single session</li> -<li>It creates the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> path of the user</li> -<li>It untars the tar-ball into the root directory.</li> -<li>It compiles the Fortran programs’s <code class="docutils literal notranslate"><span class="pre">Makefile</span></code>.</li> -<li>At the end it checks if the script returned an error or not and send the log file via email to the user.</li> +<li><p>It sets necessary batch system parameters</p></li> +<li><p>It prepares the job environment at the ECMWF servers by loading the necessary library modules</p></li> +<li><p>It sets some environment variabels for the single session</p></li> +<li><p>It creates the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> path of the user</p></li> +<li><p>It untars the tar-ball into the root directory.</p></li> +<li><p>It compiles the Fortran programs’s <code class="docutils literal notranslate"><span class="pre">Makefile</span></code>.</p></li> +<li><p>At the end it checks if the script returned an error or not and send the log file via email to the user.</p></li> </ol> </div></blockquote> </div> @@ -254,7 +254,7 @@ server system to load the necessary modules for the environment when submitted t module load eccodes/2.12.0 module load emos/455-r64 <span class="nb">export</span> <span class="nv">FLEXPART_ROOT_SCRIPTS</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span> - <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span>Makefile.gfortran + <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span>makefile_ecgate <span class="p">;;</span> *cca*<span class="o">)</span> module unload python @@ -268,18 +268,18 @@ server system to load the necessary modules for the environment when submitted t <span class="nb">export</span> <span class="nv">GROUP</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo</span> <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span> <span class="p">|</span> awk -F / <span class="s1">'{print $4}'</span><span class="sb">`</span> <span class="nb">export</span> <span class="nv">SCRATCH</span><span class="o">=</span>/scratch/ms/<span class="si">${</span><span class="nv">GROUP</span><span class="si">}</span>/<span class="si">${</span><span class="nv">USER</span><span class="si">}</span> <span class="nb">export</span> <span class="nv">FLEXPART_ROOT_SCRIPTS</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span> - <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span>Makefile.gfortran + <span class="nb">export</span> <span class="nv">MAKEFILE</span><span class="o">=</span>makefile_ecgate <span class="p">;;</span> <span class="k">esac</span> mkdir -p <span class="si">${</span><span class="nv">FLEXPART_ROOT_SCRIPTS</span><span class="si">}</span>/flex_extract_v<span class="si">${</span><span class="nv">VERSION</span><span class="si">}</span> <span class="nb">cd</span> <span class="si">${</span><span class="nv">FLEXPART_ROOT_SCRIPTS</span><span class="si">}</span>/flex_extract_v<span class="si">${</span><span class="nv">VERSION</span><span class="si">}</span> <span class="c1"># if FLEXPART_ROOT is not set this means cd to the home directory</span> tar -xvf <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_v<span class="si">${</span><span class="nv">VERSION</span><span class="si">}</span>.tar -<span class="nb">cd</span> source/fortran -<span class="se">\r</span>m *.o *.mod CONVERT2 +<span class="nb">cd</span> Source/Fortran +<span class="se">\r</span>m *.o *.mod calc_etadot make -f <span class="si">${</span><span class="nv">MAKEFILE</span><span class="si">}</span> >flexcompile <span class="m">2</span>>flexcompile -ls -l CONVERT2 >>flexcompile +ls -l calc_etadot >>flexcompile <span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> -eq <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="s1">'SUCCESS!'</span> >>flexcompile mail -s flexcompile.<span class="si">${</span><span class="nv">HOST</span><span class="si">}</span>.<span class="nv">$$</span> <span class="si">${</span><span class="nv">USER</span><span class="si">}</span> <flexcompile @@ -303,7 +303,7 @@ ls -l CONVERT2 >>flexcompile <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="fortran_makefile.html" class="btn btn-neutral float-right" title="The Fortran Makefile - CONVERT2" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="fortran_makefile.html" class="btn btn-neutral float-right" title="The Fortran Makefile - calc_etadot" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> <a href="setup.html" class="btn btn-neutral float-left" title="The Installation Script - setup.sh" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> @@ -315,7 +315,7 @@ ls -l CONVERT2 >>flexcompile <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/control.html b/Documentation/html/Documentation/Input/control.html index 6c23a5dc79322e85618d8b7ce9f1a45b29c98ebd..60306d7f4e0b815fc224a57a0c8fd9c1c4f035ba 100644 --- a/Documentation/html/Documentation/Input/control.html +++ b/Documentation/html/Documentation/Input/control.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3 current"><a class="current reference internal" href="#">The CONTROL file</a><ul> @@ -199,7 +199,8 @@ It contains the controlling parameters <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> needs to decide on dataset specifications, handling of the retrieved data and general bahaviour. The naming convention is usually (but not necessary):</p> <blockquote> -<div><code class="docutils literal notranslate"><span class="pre">CONTROL_<Dataset>[.optionalIndications]</span></code></div></blockquote> +<div><p><code class="docutils literal notranslate"><span class="pre">CONTROL_<Dataset>[.optionalIndications]</span></code></p> +</div></blockquote> <p>The tested datasets are the operational dataset and the re-analysis datasets CERA-20C, ERA5 and ERA-Interim. The optional extra indications for the re-analysis datasets mark the files for <em>public users</em> and <em>global</em> domain. For the operational datasets (<em>OD</em>) the file names contain also information of @@ -215,7 +216,7 @@ must be listed in the <code class="docutils literal notranslate"><span class="pr </div> <div class="section" id="example-control-files"> <h2>Example CONTROL files<a class="headerlink" href="#example-control-files" title="Permalink to this headline">¶</a></h2> -<p>A number of example files can be found in the directory <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/run/control/</span></code>. +<p>A number of example files can be found in the directory <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Run/Control/</span></code>. They can be used as a template for adaptations and understand what’s possible to retrieve from ECMWF’s archive. For each main dataset there is an example and additionally some variances in resolution, type of field or type of retrieving the vertical coordinate.</p> @@ -371,7 +372,7 @@ ADDPAR None <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/control_params.html b/Documentation/html/Documentation/Input/control_params.html index 7c64717bd902826d1edbcd0d2007e0457b2a5a5d..d4d45d98601d97bac8622091ee0ffeede1762cff 100644 --- a/Documentation/html/Documentation/Input/control_params.html +++ b/Documentation/html/Documentation/Input/control_params.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -203,920 +203,608 @@ <h1>The CONTROL parameters<a class="headerlink" href="#the-control-parameters" title="Permalink to this headline">¶</a></h1> <div class="section" id="user-section"> <span id="ref-control-user"></span><h2>User Section<a class="headerlink" href="#user-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id1"> +<table class="docutils align-default" id="id1"> <caption><span class="caption-text">User parameter in CONTROL file</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="18%" /> -<col width="10%" /> -<col width="15%" /> -<col width="8%" /> -<col width="16%" /> -<col width="32%" /> +<col style="width: 18%" /> +<col style="width: 10%" /> +<col style="width: 15%" /> +<col style="width: 9%" /> +<col style="width: 16%" /> +<col style="width: 32%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">ECUID</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ECGID</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">DESTINATION</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last"><name>@ generic<scope></p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The remote destination which is used to transfer files from ECMWF server to local gateway server. </p> -</td> -<td><p class="first last">This has to be set up by the user on the local gateway server. See installation instruction for more information of how to set it up.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">GATEWAY</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">server address</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The gateway server the user is using.</p> -</td> -<td><p class="first last"></p> -</td> +<tbody> +<tr class="row-even"><td><p>ECUID</p></td> +<td><p>String</p></td> +<td><p></p></td> +<td><p>None</p></td> +<td><p></p></td> +<td><p></p></td> +</tr> +<tr class="row-odd"><td><p>ECGID</p></td> +<td><p>String</p></td> +<td><p></p></td> +<td><p>None</p></td> +<td><p></p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>DESTINATION</p></td> +<td><p>String</p></td> +<td><p><name>@ generic<scope></p></td> +<td><p>None</p></td> +<td><p>The remote destination which is used to transfer files from ECMWF server to local gateway server. </p></td> +<td><p>This has to be set up by the user on the local gateway server. See installation instruction for more information of how to set it up.</p></td> +</tr> +<tr class="row-odd"><td><p>GATEWAY</p></td> +<td><p>String</p></td> +<td><p>server address</p></td> +<td><p>None</p></td> +<td><p>The gateway server the user is using.</p></td> +<td><p></p></td> </tr> </tbody> </table> </div> <div class="section" id="general-section"> <span id="ref-control-general"></span><h2>General Section<a class="headerlink" href="#general-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id2"> +<table class="docutils align-default" id="id2"> <caption><span class="caption-text">General parameter in CONTROL file</span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="13%" /> -<col width="7%" /> -<col width="9%" /> -<col width="9%" /> -<col width="25%" /> -<col width="36%" /> +<col style="width: 13%" /> +<col style="width: 7%" /> +<col style="width: 9%" /> +<col style="width: 9%" /> +<col style="width: 25%" /> +<col style="width: 36%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">DEBUG</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">If set to “1” all temporary output files from the mars requests are kept and some extra information is written out to the log file.</p> -</td> -<td><p class="first last">Usually all temporary files except the FLEXPART ready output files are deleted at the end of flex_extract.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">REQUEST</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1,2]</p> -</td> -<td><p class="first last">2</p> -</td> -<td><p class="first last">This parameter allows to write out the mars requests in a seperate file.</p> -</td> -<td><p class="first last">The requests are stored in the file “mars_requests.csv”. +<tbody> +<tr class="row-even"><td><p>DEBUG</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>If set to “1” all temporary output files from the mars requests are kept and some extra information is written out to the log file.</p></td> +<td><p>Usually all temporary files except the FLEXPART ready output files are deleted at the end of flex_extract.</p></td> +</tr> +<tr class="row-odd"><td><p>REQUEST</p></td> +<td><p>Integer</p></td> +<td><p>[0,1,2]</p></td> +<td><p>2</p></td> +<td><p>This parameter allows to write out the mars requests in a seperate file.</p></td> +<td><p>The requests are stored in the file “mars_requests.csv”. Possible selections are: -1: normal data retrievement; -2: neglect data retrievement and just writes out the mars requests; -3: retrieve data and write out the mars requests.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">PUBLIC</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">This specifies the selection of the kind of ECMWF Web Api access and therefore the kind of available datasets. Public data sets (1) and Memberstate data sets (0).</p> -</td> -<td><p class="first last">Selecting the public access method, the DATASET parameter has explicitly to be set to select the dataset. (CLASS is not enough.) ATTENTION: For public datasets, the user has to accept the license of the dataset to be retrieved. See here for available datasets and their licenses: https://software.ecmwf.int/wiki/display/WEBAPI/ Available+ECMWF+ Public+Datasets</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">OPER</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to prepare the operational job script. Start date, end date and basetime will be prepared with environment variables at ecgate.</p> -</td> -<td><p class="first last">This is only necessary if extraction of half-day retrievals should be done automatically. Specific extra feature which is usually not used by normal flex_extract users.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">ECSTORAGE</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to store FLEXPART ready output files in the ECFS file system.</p> -</td> -<td><p class="first last">Mind the data limit.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ECTRANS</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to transfer FLEXPART ready input files to the gateway server.</p> -</td> -<td><p class="first last">The gateway server has to be up and running. A destination has to be installed. See installation instructions for more information.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">PREFIX</p> -</td> -<td><p class="first last">String [xx]</p> -</td> -<td><p class="first last">anything</p> -</td> -<td><p class="first last">EN</p> -</td> -<td><p class="first last">Prefix of FLEXPART ready input files</p> -</td> -<td><p class="first last">The output files usually have the format <PREFIX>YYMMDDHH. Sometimes it also has some more information, e.g. to distinguish between numbers or in pure forecast mode.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ECFSDIR</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any path available</p> -</td> -<td><p class="first last">ectmp:/${USER}/econdemand/</p> -</td> -<td><p class="first last">The destination directory on ECFS file system if the retrieved data should be stored on ECMWF servers. This is only used if parameter ECSTORAGE is set to “1”.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">MAILOPS</p> -</td> -<td><p class="first last">list of String [m1, m2, …]</p> -</td> -<td><p class="first last">any number of mail addresses, seperated by comma</p> -</td> -<td><p class="first last">[‘”${USER}”]</p> -</td> -<td><p class="first last">Email list for operational log files on ECMWF servers. The email addresses should be seperated by a comma.</p> -</td> -<td><p class="first last">For the ECMWF server it is enough to give ${USER} as input. On local system an actual email is prefered to operate correctly. </p> -</td> +0: normal data retrievement; +1: neglect data retrievement and just writes out the mars requests; +2: retrieve data and write out the mars requests.</p></td> +</tr> +<tr class="row-even"><td><p>PUBLIC</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>This specifies the selection of the kind of ECMWF Web Api access and therefore the kind of available datasets. Public data sets (1) and Memberstate data sets (0).</p></td> +<td><p>Selecting the public access method, the DATASET parameter has explicitly to be set to select the dataset. (CLASS is not enough.) ATTENTION: For public datasets, the user has to accept the license of the dataset to be retrieved. See here for available datasets and their licenses: https://software.ecmwf.int/wiki/display/WEBAPI/ Available+ECMWF+ Public+Datasets</p></td> +</tr> +<tr class="row-odd"><td><p>OPER</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to prepare the operational job script. Start date, end date and basetime will be prepared with environment variables at ecgate.</p></td> +<td><p>This is only necessary if extraction of half-day retrievals should be done automatically. Specific extra feature which is usually not used by normal flex_extract users.</p></td> +</tr> +<tr class="row-even"><td><p>ECSTORAGE</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to store FLEXPART ready output files in the ECFS file system.</p></td> +<td><p>Mind the data limit.</p></td> +</tr> +<tr class="row-odd"><td><p>ECTRANS</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to transfer FLEXPART ready input files to the gateway server.</p></td> +<td><p>The gateway server has to be up and running. A destination has to be installed. See installation instructions for more information.</p></td> +</tr> +<tr class="row-even"><td><p>PREFIX</p></td> +<td><p>String [xx]</p></td> +<td><p>anything</p></td> +<td><p>EN</p></td> +<td><p>Prefix of FLEXPART ready input files</p></td> +<td><p>The output files usually have the format <PREFIX>YYMMDDHH. Sometimes it also has some more information, e.g. to distinguish between numbers or in pure forecast mode.</p></td> +</tr> +<tr class="row-odd"><td><p>ECFSDIR</p></td> +<td><p>String</p></td> +<td><p>any path available</p></td> +<td><p>ectmp:/${USER}/econdemand/</p></td> +<td><p>The destination directory on ECFS file system if the retrieved data should be stored on ECMWF servers. This is only used if parameter ECSTORAGE is set to “1”.</p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>MAILOPS</p></td> +<td><p>list of String [m1, m2, …]</p></td> +<td><p>any number of mail addresses, seperated by comma</p></td> +<td><p>[‘”${USER}”]</p></td> +<td><p>Email list for operational log files on ECMWF servers. The email addresses should be seperated by a comma.</p></td> +<td><p>For the ECMWF server it is enough to give ${USER} as input. On local system an actual email is prefered to operate correctly. </p></td> </tr> </tbody> </table> </div> <div class="section" id="time-section"> <span id="ref-control-time"></span><h2>Time Section<a class="headerlink" href="#time-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id3"> +<table class="docutils align-default" id="id3"> <caption><span class="caption-text">Time parameter in CONTROL file</span><a class="headerlink" href="#id3" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="15%" /> -<col width="8%" /> -<col width="12%" /> -<col width="8%" /> -<col width="28%" /> -<col width="28%" /> +<col style="width: 15%" /> +<col style="width: 8%" /> +<col style="width: 12%" /> +<col style="width: 8%" /> +<col style="width: 28%" /> +<col style="width: 28%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">START_DATE</p> -</td> -<td><p class="first last">String [YYYYMMDD]</p> -</td> -<td><p class="first last">depends on dataset</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The first day of the retrieval period.</p> -</td> -<td><p class="first last">If END_DATE is set, START_DATE must be greater than END_DATE.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">END_DATE</p> -</td> -<td><p class="first last">String [YYYYMMDD]</p> -</td> -<td><p class="first last">depends on dataset</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The last day of the retrieval period. For a one day retrieval it has to be the same date as START_DATE. If not set, it is automatically equal to START_DATE. </p> -</td> -<td><p class="first last">Doesn’t have to be set. If set, it has to be greater or equal than START_DATE.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">DTIME</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">1, 3, 6</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Time step of retrieved data. Detects TYPE, TIME, STEP, ACCTYPE, ACCTIME according to DTIME. Therefore CONTROL file can have more values than needed.</p> -</td> -<td><p class="first last">Available resolution in time depends on availability in the data set. Coarser resolution can always be selected.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">DATE_CHUNK</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">depends on resolution</p> -</td> -<td><p class="first last">3</p> -</td> -<td><p class="first last">Maximum number of days retrieved within one MARS request. </p> -</td> -<td><p class="first last">This number is limited due to maximum allowed memory and time limit for one MARS request. Be careful in changing this number. It can be larger for reanalysis data but may be too large for very high resolution retrievals.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">BASETIME</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0; 12]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This parameter is intended for half-day retrievals. Only half a day will be retrieved starting from BASETIME going back 12 hours. E.g. 20180510 with a BASETIME = 00 would lead to a data retrieval of 20180509 12h until 20180510 00h.</p> -</td> -<td><p class="first last">Can be set to 00 or 12 only.</p> -</td> +<tbody> +<tr class="row-even"><td><p>START_DATE</p></td> +<td><p>String [YYYYMMDD]</p></td> +<td><p>depends on dataset</p></td> +<td><p>None</p></td> +<td><p>The first day of the retrieval period.</p></td> +<td><p>If END_DATE is set, START_DATE must be greater than END_DATE.</p></td> +</tr> +<tr class="row-odd"><td><p>END_DATE</p></td> +<td><p>String [YYYYMMDD]</p></td> +<td><p>depends on dataset</p></td> +<td><p>None</p></td> +<td><p>The last day of the retrieval period. For a one day retrieval it has to be the same date as START_DATE. If not set, it is automatically equal to START_DATE. </p></td> +<td><p>Doesn’t have to be set. If set, it has to be greater or equal than START_DATE.</p></td> +</tr> +<tr class="row-even"><td><p>DTIME</p></td> +<td><p>Integer</p></td> +<td><p>1, 3, 6</p></td> +<td><p>None</p></td> +<td><p>Time step of retrieved data. Detects TYPE, TIME, STEP, ACCTYPE, ACCTIME according to DTIME. Therefore CONTROL file can have more values than needed.</p></td> +<td><p>Available resolution in time depends on availability in the data set. Coarser resolution can always be selected.</p></td> +</tr> +<tr class="row-odd"><td><p>DATE_CHUNK</p></td> +<td><p>Integer</p></td> +<td><p>depends on resolution</p></td> +<td><p>3</p></td> +<td><p>Maximum number of days retrieved within one MARS request. </p></td> +<td><p>This number is limited due to maximum allowed memory and time limit for one MARS request. Be careful in changing this number. It can be larger for reanalysis data but may be too large for very high resolution retrievals.</p></td> +</tr> +<tr class="row-even"><td><p>BASETIME</p></td> +<td><p>Integer</p></td> +<td><p>[0; 12]</p></td> +<td><p>None</p></td> +<td><p>This parameter is intended for half-day retrievals. Only half a day will be retrieved starting from BASETIME going back 12 hours. E.g. 20180510 with a BASETIME = 00 would lead to a data retrieval of 20180509 12h until 20180510 00h.</p></td> +<td><p>Can be set to 00 or 12 only.</p></td> </tr> </tbody> </table> </div> <div class="section" id="data-section"> <span id="ref-control-data"></span><h2>Data Section<a class="headerlink" href="#data-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id4"> +<table class="docutils align-default" id="id4"> <caption><span class="caption-text">Data parameter in CONTROL file</span><a class="headerlink" href="#id4" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="13%" /> -<col width="7%" /> -<col width="12%" /> -<col width="6%" /> -<col width="36%" /> -<col width="25%" /> +<col style="width: 13%" /> +<col style="width: 7%" /> +<col style="width: 12%" /> +<col style="width: 6%" /> +<col style="width: 36%" /> +<col style="width: 25%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">CLASS</p> -</td> -<td><p class="first last">String [xx]</p> -</td> -<td><p class="first last">EI, E4, EA, EP, OD </p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">ECMWF data classification identifier for data sets.</p> -</td> -<td><p class="first last">EI: ERA-Interim; E4: ERA-40; EA: ERA5; EP: CERA-20C; OD: operational; </p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">DATASET</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">CERA20C, INTERIM, ERA5</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This keyword has to be defined as soon as you want to retrieve public data sets. Public data are stored on a different server and are available for everyone after registration at ECMWF (see installation plan). </p> -</td> -<td><p class="first last">A list of available public dataset can be found here: -https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">STREAM</p> -</td> -<td><p class="first last">String [xxxx]</p> -</td> -<td><p class="first last">OPER, ENFO, ENDO</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Identifies the forecasting system used to generate the data. </p> -</td> -<td><p class="first last">Most times the operational data stream OPER is appropriate. Use ENFO for ensemble forecasts and ENDO for CERA data.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">EXPVER</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">1</p> -</td> -<td><p class="first last">“1”</p> -</td> -<td><p class="first last">Experiment number, necessary for R&D experiments, E-suites</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">NUMBER</p> -</td> -<td><p class="first last">String [i/to/i]</p> -</td> -<td><p class="first last">depends on availability</p> -</td> -<td><p class="first last">“OFF”</p> -</td> -<td><p class="first last">In most cases this can be set to “OFF” but for access to individual ensemble members of ensemble forecasts it is necessary to select numbers. Note, however, that model level data are not stored in MARS for individual ensemble members except the control run. They exist only for a few days before they are discarded. </p> -</td> -<td><p class="first last">For retrieving CERA data, a number has to be selected explicitly. Usually “0” is enough. -For operational data just one number or a list of number can be selected. You can use the syntax “1/to/9” for example.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">FORMAT</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">[GRIB1, GRIB2]</p> -</td> -<td><p class="first last">“GRIB1”</p> -</td> -<td><p class="first last">Output format (either GRIB1 or GRIB2). Use GRIB2 -only when using FLEXPART versions >9.2 or FLEXPART hast to be adapted for reading GRIB2</p> -</td> -<td><p class="first last">GRIB2 is only available for 3D model level fields, not for surface fields.</p> -</td> +<tbody> +<tr class="row-even"><td><p>CLASS</p></td> +<td><p>String [xx]</p></td> +<td><p>EI, E4, EA, EP, OD </p></td> +<td><p>None</p></td> +<td><p>ECMWF data classification identifier for data sets.</p></td> +<td><p>EI: ERA-Interim; E4: ERA-40; EA: ERA5; EP: CERA-20C; OD: operational; </p></td> +</tr> +<tr class="row-odd"><td><p>DATASET</p></td> +<td><p>String</p></td> +<td><p>CERA20C, INTERIM, ERA5</p></td> +<td><p>None</p></td> +<td><p>This keyword has to be defined as soon as you want to retrieve public data sets. Public data are stored on a different server and are available for everyone after registration at ECMWF (see installation plan). </p></td> +<td><p>A list of available public dataset can be found here: +https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets</p></td> +</tr> +<tr class="row-even"><td><p>STREAM</p></td> +<td><p>String [xxxx]</p></td> +<td><p>OPER, ENFO, ENDO</p></td> +<td><p>None</p></td> +<td><p>Identifies the forecasting system used to generate the data. </p></td> +<td><p>Most times the operational data stream OPER is appropriate. Use ENFO for ensemble forecasts and ENDO for CERA data.</p></td> +</tr> +<tr class="row-odd"><td><p>EXPVER</p></td> +<td><p>String</p></td> +<td><p>1</p></td> +<td><p>“1”</p></td> +<td><p>Experiment number, necessary for R&D experiments, E-suites</p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>NUMBER</p></td> +<td><p>String [i/to/i]</p></td> +<td><p>depends on availability</p></td> +<td><p>“OFF”</p></td> +<td><p>In most cases this can be set to “OFF” but for access to individual ensemble members of ensemble forecasts it is necessary to select numbers. Note, however, that model level data are not stored in MARS for individual ensemble members except the control run. They exist only for a few days before they are discarded. </p></td> +<td><p>For retrieving CERA data, a number has to be selected explicitly. Usually “0” is enough. +For operational data just one number or a list of number can be selected. You can use the syntax “1/to/9” for example.</p></td> +</tr> +<tr class="row-odd"><td><p>FORMAT</p></td> +<td><p>String</p></td> +<td><p>[GRIB1, GRIB2]</p></td> +<td><p>“GRIB1”</p></td> +<td><p>Output format (either GRIB1 or GRIB2). Use GRIB2 +only when using FLEXPART versions >9.2 or FLEXPART hast to be adapted for reading GRIB2</p></td> +<td><p>GRIB2 is only available for 3D model level fields, not for surface fields.</p></td> </tr> </tbody> </table> </div> <div class="section" id="data-field-section"> <span id="ref-control-datafield"></span><h2>Data field Section<a class="headerlink" href="#data-field-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id5"> +<table class="docutils align-default" id="id5"> <caption><span class="caption-text">Data field parameter in CONTROL file</span><a class="headerlink" href="#id5" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="15%" /> -<col width="8%" /> -<col width="10%" /> -<col width="6%" /> -<col width="24%" /> -<col width="36%" /> +<col style="width: 15%" /> +<col style="width: 8%" /> +<col style="width: 10%" /> +<col style="width: 6%" /> +<col style="width: 24%" /> +<col style="width: 36%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">TYPE</p> -</td> -<td><p class="first last">list of String [xx xx … xx]</p> -</td> -<td><p class="first last">[AN, FC, CV, CF, 4V, PF]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">A list of field types for each retrieving hour per day. E.g. AN FC FC FC AN FC FC FC for a day with 3-hourly retrieval DTIME . At 0 and 12 UTC we retrieve analysis fields and at 3, 6, 9, 15, 18 and 21 UTC forecast fields. </p> -</td> -<td><p class="first last">So far flex_extract is using ANalysis (AN), ForeCast (FC), Control Forecast (CF), Perturbed Forecast (PF), Calibration/Validation forecast (CV) and 4D Variational analysis (4V). Other types might be also possible but were not tested. The analysis fields are usually (depending on data set) available at 00/06/12/18 UTC. For better temporal resolution, the time inbetween the AN fields can be filled with forecasts (FC). Additionally, it is recommended to use analysis fields only at 00 and 12 UTC and fill the rest of the times with other field types, such as forecasts. </p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">TIME</p> -</td> -<td><p class="first last">list of String [xx xx … xx]</p> -</td> -<td><p class="first last">[00 - 23]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The time of the corresponding field type (TYPE) in hours. It is important to set the correct forecast times. E.g. In Era-Interim data set, to get forecast fields between 1 and 11 hours, forecast times starting at 00 UTC are normally used. To get fields between 13 and 23 hours, forecast times starting at 12 UTC are used. Mostly there are two forecasts starting per day. </p> -</td> -<td><p class="first last">Has to have the same amount of values as in TYPE! The start times of forecasts can vary from one data set to another. It is also possible to have just one forecast per day, such as in the CERA data set.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">STEP</p> -</td> -<td><p class="first last">list of String [xx xx … xx]</p> -</td> -<td><p class="first last">[00 - max available STEP in data set]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This is the forecast time step in hours for each corresponding field type (TYPE). Counting of the steps starts from the forecast times. E.g. In Era-Interim, for forecasts at 3, 6, 9 UTC the STEPS 3,6 and 9 are used and the forecast TIME 00 UTC.</p> -</td> -<td><p class="first last">Has to have the same amount of values as in TYPE and TIME! For analysis (AN) fields the STEP has to be 00 always!</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">MAXSTEP</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">> 24</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This parameter allows to retrieve data from forecasts longer than 24 hours. -With MAXSTEP > 24 the forecasts from different days overlap, the naming scheme of the output files changes from <PREFIX>YYMMDD to <PREFIX>YYMMDD.HH.SSS where HH is the hour of the start of the forecast and SSS is the forecast step in hours.</p> -</td> -<td><p class="first last">Optional parameter.</p> -</td> +<tbody> +<tr class="row-even"><td><p>TYPE</p></td> +<td><p>list of String [xx xx … xx]</p></td> +<td><p>[AN, FC, CV, CF, 4V, PF]</p></td> +<td><p>None</p></td> +<td><p>A list of field types for each retrieving hour per day. E.g. AN FC FC FC AN FC FC FC for a day with 3-hourly retrieval DTIME . At 0 and 12 UTC we retrieve analysis fields and at 3, 6, 9, 15, 18 and 21 UTC forecast fields. </p></td> +<td><p>So far flex_extract is using ANalysis (AN), ForeCast (FC), Control Forecast (CF), Perturbed Forecast (PF), Calibration/Validation forecast (CV) and 4D Variational analysis (4V). Other types might be also possible but were not tested. The analysis fields are usually (depending on data set) available at 00/06/12/18 UTC. For better temporal resolution, the time inbetween the AN fields can be filled with forecasts (FC). Additionally, it is recommended to use analysis fields only at 00 and 12 UTC and fill the rest of the times with other field types, such as forecasts. </p></td> +</tr> +<tr class="row-odd"><td><p>TIME</p></td> +<td><p>list of String [xx xx … xx]</p></td> +<td><p>[00 - 23]</p></td> +<td><p>None</p></td> +<td><p>The time of the corresponding field type (TYPE) in hours. It is important to set the correct forecast times. E.g. In Era-Interim data set, to get forecast fields between 1 and 11 hours, forecast times starting at 00 UTC are normally used. To get fields between 13 and 23 hours, forecast times starting at 12 UTC are used. Mostly there are two forecasts starting per day. </p></td> +<td><p>Has to have the same amount of values as in TYPE! The start times of forecasts can vary from one data set to another. It is also possible to have just one forecast per day, such as in the CERA data set.</p></td> +</tr> +<tr class="row-even"><td><p>STEP</p></td> +<td><p>list of String [xx xx … xx]</p></td> +<td><p>[00 - max available STEP in data set]</p></td> +<td><p>None</p></td> +<td><p>This is the forecast time step in hours for each corresponding field type (TYPE). Counting of the steps starts from the forecast times. E.g. In Era-Interim, for forecasts at 3, 6, 9 UTC the STEPS 3,6 and 9 are used and the forecast TIME 00 UTC.</p></td> +<td><p>Has to have the same amount of values as in TYPE and TIME! For analysis (AN) fields the STEP has to be 00 always!</p></td> +</tr> +<tr class="row-odd"><td><p>MAXSTEP</p></td> +<td><p>Integer</p></td> +<td><p>> 24</p></td> +<td><p>None</p></td> +<td><p>This parameter allows to retrieve data from forecasts longer than 24 hours. +With MAXSTEP > 24 the forecasts from different days overlap, the naming scheme of the output files changes from <PREFIX>YYMMDD to <PREFIX>YYMMDD.HH.SSS where HH is the hour of the start of the forecast and SSS is the forecast step in hours.</p></td> +<td><p>Optional parameter.</p></td> </tr> </tbody> </table> </div> <div class="section" id="flux-data-section"> <span id="ref-control-fluxdata"></span><h2>Flux data Section<a class="headerlink" href="#flux-data-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id6"> +<table class="docutils align-default" id="id6"> <caption><span class="caption-text">Flux data parameter in CONTROL file</span><a class="headerlink" href="#id6" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="15%" /> -<col width="8%" /> -<col width="12%" /> -<col width="7%" /> -<col width="25%" /> -<col width="32%" /> +<col style="width: 15%" /> +<col style="width: 8%" /> +<col style="width: 12%" /> +<col style="width: 7%" /> +<col style="width: 25%" /> +<col style="width: 32%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">ACCTYPE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">[FC, CV, CF, 4V, PF] - just one of them</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The type of field for accumulated data retrieval. The accumulated data fields are only available from forecast fields. Therefore it is seperated from the normal TYPE parameter to allow, for example, retrievment solely of hourly analysis fields in the Era5 data set. </p> -</td> -<td><p class="first last">For downward compatibility to older versions: if ACCTYPE is not specified, the default value is taken form the second position of the original TYPE parameter (TYPE[2]). NOTE: This is important at the moment the original TYPE parameter is changed from FC to AN for example.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ACCTIME</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">E.g.: Operational, Era-Interim: 00/12 CERA: 18 ERA5 06/18</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Start times of accumulated forecast fields (fluxes). The starting times of forecast fields varies between different datasets. </p> -</td> -<td><p class="first last">For downward compatibility to older versions: if ACCTIME is not specified, the default value is 00/12 for ERA-Interim and operational data, 06/18 for ERA5 data and 18 for CERA-20C data. </p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">ACCMAXSTEP</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">12, 24 or larger</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This parameter specifies the maximum step in hours for a specific accumulated forecast start time. For daily retrievals with one forecast time the step shouldn’t be greater than 24h. For two forecast times the ACCMAXSTEP should be 12. If the parameter MAXSTEP is specified to retrieve forecasts longer than 24 hours, this parameter must have the same value. </p> -</td> -<td><p class="first last">For downward compatibility to older versions: if ACCMAXSTEP is not specified, the default value is set to 12 for ERA5, Era-Interim and operational data or 24 for CERA-20C data, according to one or two forecast times of the data set.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">RRINT</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">1</p> -</td> -<td><p class="first last">Switch to select method of disaggregation for precipitation fields. Old method (0) with a simple linear disaggregation or new method (1) with 2 additional subsequent intervals per time interval.</p> -</td> -<td><p class="first last">For more information see article: -Hittmeir, S.; Philipp, A.; Seibert, P. (2017): A conservative interpolation scheme for extensive quantities with application to the Lagrangian particle dispersion model FLEXPART., Geoscientific Model Development. https://doi.org/10.5194/gmd-11-2503-2018</p> -</td> +<tbody> +<tr class="row-even"><td><p>ACCTYPE</p></td> +<td><p>String</p></td> +<td><p>[FC, CV, CF, 4V, PF] - just one of them</p></td> +<td><p>None</p></td> +<td><p>The type of field for accumulated data retrieval. The accumulated data fields are only available from forecast fields. Therefore it is seperated from the normal TYPE parameter to allow, for example, retrievment solely of hourly analysis fields in the Era5 data set. </p></td> +<td><p>For downward compatibility to older versions: if ACCTYPE is not specified, the default value is taken form the second position of the original TYPE parameter (TYPE[2]). NOTE: This is important at the moment the original TYPE parameter is changed from FC to AN for example.</p></td> +</tr> +<tr class="row-odd"><td><p>ACCTIME</p></td> +<td><p>String</p></td> +<td><p>E.g.: Operational, Era-Interim: 00/12 CERA: 18 ERA5 06/18</p></td> +<td><p>None</p></td> +<td><p>Start times of accumulated forecast fields (fluxes). The starting times of forecast fields varies between different datasets. </p></td> +<td><p>For downward compatibility to older versions: if ACCTIME is not specified, the default value is 00/12 for ERA-Interim and operational data, 06/18 for ERA5 data and 18 for CERA-20C data. </p></td> +</tr> +<tr class="row-even"><td><p>ACCMAXSTEP</p></td> +<td><p>Integer</p></td> +<td><p>12, 24 or larger</p></td> +<td><p>None</p></td> +<td><p>This parameter specifies the maximum step in hours for a specific accumulated forecast start time. For daily retrievals with one forecast time the step shouldn’t be greater than 24h. For two forecast times the ACCMAXSTEP should be 12. If the parameter MAXSTEP is specified to retrieve forecasts longer than 24 hours, this parameter must have the same value. </p></td> +<td><p>For downward compatibility to older versions: if ACCMAXSTEP is not specified, the default value is set to 12 for ERA5, Era-Interim and operational data or 24 for CERA-20C data, according to one or two forecast times of the data set.</p></td> +</tr> +<tr class="row-odd"><td><p>RRINT</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>1</p></td> +<td><p>Switch to select method of disaggregation for precipitation fields. Old method (0) with a simple linear disaggregation or new method (1) with 2 additional subsequent intervals per time interval.</p></td> +<td><p>For more information see article: +Hittmeir, S.; Philipp, A.; Seibert, P. (2017): A conservative interpolation scheme for extensive quantities with application to the Lagrangian particle dispersion model FLEXPART., Geoscientific Model Development. https://doi.org/10.5194/gmd-11-2503-2018</p></td> </tr> </tbody> </table> </div> <div class="section" id="domain-section"> <span id="ref-control-domain"></span><h2>Domain Section<a class="headerlink" href="#domain-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="colwidths-given docutils" id="id7"> +<table class="colwidths-given docutils align-default" id="id7"> <caption><span class="caption-text">Domain parameter in CONTROL file</span><a class="headerlink" href="#id7" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="13%" /> -<col width="13%" /> -<col width="13%" /> -<col width="7%" /> -<col width="27%" /> -<col width="27%" /> +<col style="width: 13%" /> +<col style="width: 13%" /> +<col style="width: 13%" /> +<col style="width: 7%" /> +<col style="width: 27%" /> +<col style="width: 27%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">GRID</p> -</td> -<td><p class="first last">String [i/i]</p> -</td> -<td><p class="first last">0.1° - appropriate value e.g. 2°</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Horizontal resolution of Latitude/Longitude grid. Best possible resolution varies for different data sets. E.g in operational data it’s 0.1° whereas in Era-Interim it is 0.75°.</p> -</td> -<td><p class="first last">It can be specified in tenth degrees (1°) or thousandth degrees (1000 for 1°).</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">RESOL</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">depends on GRID</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Horizontal resolution of spectral fields. Specifies the desired triangular truncation of retrieved data, before carrying out any other selected post-processing.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">SMOOTH</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">approriate number</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Spectral truncation of ETADOT after calculation on -Gaussian grid</p> -</td> -<td><p class="first last">For more information see: Sardeshmukh and Hoskins, (1984): Spatial Smoothing on the Sphere, Monthly Weather Review, Vol. 112, No.12, P. 2524-2529</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">UPPER</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">-90+GRID -to 90</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Latitude of upper right corner of grid area. </p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">LOWER</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">-90+GRID -to 90</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Latitude of lower left corner of grid area.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">LEFT</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">-180+GRID -to 180</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Longitude of lower left corner of grid area.</p> -</td> -<td><p class="first last">For cyclic (global) grids, use e.g. LEFT = - 180 + GRID, RIGHT = 180. For noncyclic grids crossing the dateline (180W), RIGHT may be smaller than LEFT.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">RIGHT</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">-180+GRID -to 180</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Longitude of upper right corner of grid area.</p> -</td> -<td><p class="first last">For cyclic (global) grids, use e.g. LEFT = - 180 + GRID, RIGHT = 180. For noncyclic grids crossing the dateline (180W), RIGHT may be smaller than LEFT.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">LEVEL</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">60, 91, 137 -depends on data set</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Maximum number of vertical levels.</p> -</td> -<td><p class="first last">ERA-Interim has 60 levels; ERA5 has 137 levels; CERA-20C has 91 levels; Operational data can have different number of model levels depending on the date. Check upfront in the MARS catalogue. If LEVELIST is set , this parameter is not needed.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">LEVELIST</p> -</td> -<td><p class="first last">String [start/to/end]</p> -</td> -<td><p class="first last">1/to/137</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">List of vertical levels for MARS request. It can be a subset of levels but it has to include the maximum level (end).</p> -</td> -<td><p class="first last">If full list of levels is needed and parameter LEVEL is set, the LEVELIST parameter is not needed. “end” has to be the maximum number of possible levels and has to be the same as in LEVEL, if specified.</p> -</td> +<tbody> +<tr class="row-even"><td><p>GRID</p></td> +<td><p>String [i/i]</p></td> +<td><p>0.1° - appropriate value e.g. 2°</p></td> +<td><p>None</p></td> +<td><p>Horizontal resolution of Latitude/Longitude grid. Best possible resolution varies for different data sets. E.g in operational data it’s 0.1° whereas in Era-Interim it is 0.75°.</p></td> +<td><p>It can be specified in tenth degrees (1°) or thousandth degrees (1000 for 1°).</p></td> +</tr> +<tr class="row-odd"><td><p>RESOL</p></td> +<td><p>String</p></td> +<td><p>depends on GRID</p></td> +<td><p>None</p></td> +<td><p>Horizontal resolution of spectral fields. Specifies the desired triangular truncation of retrieved data, before carrying out any other selected post-processing.</p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>SMOOTH</p></td> +<td><p>Integer</p></td> +<td><p>approriate number</p></td> +<td><p>0</p></td> +<td><p>Spectral truncation of ETADOT after calculation on +Gaussian grid</p></td> +<td><p>For more information see: Sardeshmukh and Hoskins, (1984): Spatial Smoothing on the Sphere, Monthly Weather Review, Vol. 112, No.12, P. 2524-2529</p></td> +</tr> +<tr class="row-odd"><td><p>UPPER</p></td> +<td><p>String</p></td> +<td><p>-90+GRID +to 90</p></td> +<td><p>None</p></td> +<td><p>Latitude of upper right corner of grid area. </p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>LOWER</p></td> +<td><p>String</p></td> +<td><p>-90+GRID +to 90</p></td> +<td><p>None</p></td> +<td><p>Latitude of lower left corner of grid area.</p></td> +<td><p></p></td> +</tr> +<tr class="row-odd"><td><p>LEFT</p></td> +<td><p>String</p></td> +<td><p>-180+GRID +to 180</p></td> +<td><p>None</p></td> +<td><p>Longitude of lower left corner of grid area.</p></td> +<td><p>For cyclic (global) grids, use e.g. LEFT = - 180 + GRID, RIGHT = 180. For noncyclic grids crossing the dateline (180W), RIGHT may be smaller than LEFT.</p></td> +</tr> +<tr class="row-even"><td><p>RIGHT</p></td> +<td><p>String</p></td> +<td><p>-180+GRID +to 180</p></td> +<td><p>None</p></td> +<td><p>Longitude of upper right corner of grid area.</p></td> +<td><p>For cyclic (global) grids, use e.g. LEFT = - 180 + GRID, RIGHT = 180. For noncyclic grids crossing the dateline (180W), RIGHT may be smaller than LEFT.</p></td> +</tr> +<tr class="row-odd"><td><p>LEVEL</p></td> +<td><p>String</p></td> +<td><p>60, 91, 137 +depends on data set</p></td> +<td><p>None</p></td> +<td><p>Maximum number of vertical levels.</p></td> +<td><p>ERA-Interim has 60 levels; ERA5 has 137 levels; CERA-20C has 91 levels; Operational data can have different number of model levels depending on the date. Check upfront in the MARS catalogue. If LEVELIST is set , this parameter is not needed.</p></td> +</tr> +<tr class="row-even"><td><p>LEVELIST</p></td> +<td><p>String [start/to/end]</p></td> +<td><p>1/to/137</p></td> +<td><p>None</p></td> +<td><p>List of vertical levels for MARS request. It can be a subset of levels but it has to include the maximum level (end).</p></td> +<td><p>If full list of levels is needed and parameter LEVEL is set, the LEVELIST parameter is not needed. “end” has to be the maximum number of possible levels and has to be the same as in LEVEL, if specified.</p></td> </tr> </tbody> </table> </div> <div class="section" id="vertical-wind-section"> <span id="ref-control-verticalwind"></span><h2>Vertical wind Section<a class="headerlink" href="#vertical-wind-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id8"> +<table class="docutils align-default" id="id8"> <caption><span class="caption-text">Vertical wind parameter in CONTROL file</span><a class="headerlink" href="#id8" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="15%" /> -<col width="9%" /> -<col width="10%" /> -<col width="9%" /> -<col width="29%" /> -<col width="28%" /> +<col style="width: 15%" /> +<col style="width: 9%" /> +<col style="width: 10%" /> +<col style="width: 9%" /> +<col style="width: 29%" /> +<col style="width: 28%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">GAUSS</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">A switch to calculate ETADOT from Lat/Lon grid (0) or from Gaussian grid (1)</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ACCURACY</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last">24</p> -</td> -<td><p class="first last">Specifies the number of bits per value to be used in the generated GRIB coded fields.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">OMEGA</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Retrieve Omega from MARS and put it to file -OMEGAyymmddhh</p> -</td> -<td><p class="first last">Only useful for debugging reasons.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">OMEGADIFF</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Calculate Omega and Dps/Dt from continuity -equation for diagnostic purposes and include it in file OMEGAyymmddhh</p> -</td> -<td><p class="first last">Only useful for debugging reasons.</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">ETA</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to read ETADOT precalculated by ECMWF and multiply it with DPDETA to be compatible with ETADOT calculated from continuity equation. -ETADOT calculation from continuity equation on either Gaussian or lat/lon grid is disabled unless ETADIFF is set to 1 as well.</p> -</td> -<td><p class="first last">ETADOT is available in ERA5, CERA-20C and operational data sets. Precalculated ETADOT is operationally available from September 2008 onwards. However, it is not available in the ERA-40 and ERA-Interim data set. If ETA is selected in the last two data sets, flex_extract fails.</p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ETADIFF</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to calculate etadot and Dps/Dt from continuity equation for diagnostic purposes and include it in file ETAyymmddhh. Expensive option, only for debugging purposes.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">DPDETA</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">1</p> -</td> -<td><p class="first last">Switch to multiply etadot with dpdeta – this is the default. In some future version this may change.</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">ETAPAR</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">77</p> -</td> -<td><p class="first last">77</p> -</td> -<td><p class="first last">GRIB parameter number for ETADOT/DPDETA </p> -</td> -<td><p class="first last"></p> -</td> +<tbody> +<tr class="row-even"><td><p>GAUSS</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>A switch to calculate ETADOT from Lat/Lon grid (0) or from Gaussian grid (1)</p></td> +<td><p></p></td> +</tr> +<tr class="row-odd"><td><p>ACCURACY</p></td> +<td><p>Integer</p></td> +<td><p></p></td> +<td><p>24</p></td> +<td><p>Specifies the number of bits per value to be used in the generated GRIB coded fields.</p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>OMEGA</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Retrieve Omega from MARS and put it to file +OMEGAyymmddhh</p></td> +<td><p>Only useful for debugging reasons.</p></td> +</tr> +<tr class="row-odd"><td><p>OMEGADIFF</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Calculate Omega and Dps/Dt from continuity +equation for diagnostic purposes and include it in file OMEGAyymmddhh</p></td> +<td><p>Only useful for debugging reasons.</p></td> +</tr> +<tr class="row-even"><td><p>ETA</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to read ETADOT precalculated by ECMWF and multiply it with DPDETA to be compatible with ETADOT calculated from continuity equation. +ETADOT calculation from continuity equation on either Gaussian or lat/lon grid is disabled unless ETADIFF is set to 1 as well.</p></td> +<td><p>ETADOT is available in ERA5, CERA-20C and operational data sets. Precalculated ETADOT is operationally available from September 2008 onwards. However, it is not available in the ERA-40 and ERA-Interim data set. If ETA is selected in the last two data sets, flex_extract fails.</p></td> +</tr> +<tr class="row-odd"><td><p>ETADIFF</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to calculate etadot and Dps/Dt from continuity equation for diagnostic purposes and include it in file ETAyymmddhh. Expensive option, only for debugging purposes.</p></td> +<td><p></p></td> +</tr> +<tr class="row-even"><td><p>DPDETA</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>1</p></td> +<td><p>Switch to multiply etadot with dpdeta – this is the default. In some future version this may change.</p></td> +<td><p></p></td> +</tr> +<tr class="row-odd"><td><p>ETAPAR</p></td> +<td><p>Integer</p></td> +<td><p>77</p></td> +<td><p>77</p></td> +<td><p>GRIB parameter number for ETADOT/DPDETA </p></td> +<td><p></p></td> </tr> </tbody> </table> </div> <div class="section" id="additional-data-section"> <span id="ref-control-adddata"></span><h2>Additional data Section<a class="headerlink" href="#additional-data-section" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id9"> +<table class="docutils align-default" id="id9"> <caption><span class="caption-text">Additional data parameter in CONTROL file</span><a class="headerlink" href="#id9" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="17%" /> -<col width="9%" /> -<col width="13%" /> -<col width="11%" /> -<col width="15%" /> -<col width="35%" /> +<col style="width: 17%" /> +<col style="width: 9%" /> +<col style="width: 13%" /> +<col style="width: 11%" /> +<col style="width: 15%" /> +<col style="width: 35%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Information / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Information / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">CWC</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to retrieve cloud water content (sum of cloud liquid water and cloud ice) (1) or not (0).</p> -</td> -<td><p class="first last"></p> -</td> -</tr> -<tr class="row-odd"><td><p class="first last">DOUBLEELDA</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Switch to select the calculation of extra ensemble members for the ELDA stream. It doubles the amount of retrieved ensemble members.</p> -</td> -<td><p class="first last">Each ensemble member is used to create a new synthesized ensemble member by subtracting 2 * ( current time step value - last time step value ) from the current time step value</p> -</td> -</tr> -<tr class="row-even"><td><p class="first last">ADDPAR</p> -</td> -<td><p class="first last">String [p1/p2/../pn]</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Additional optional surface parameters (2D fields, non-accumulated) -Mostly: 27/28/173/186/187/188/235/139/39</p> -</td> -<td><p class="first last">Parameters can be specified as the Integer IDs or with the short names.</p> -</td> +<tbody> +<tr class="row-even"><td><p>CWC</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to retrieve cloud water content (sum of cloud liquid water and cloud ice) (1) or not (0).</p></td> +<td><p></p></td> +</tr> +<tr class="row-odd"><td><p>DOUBLEELDA</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Switch to select the calculation of extra ensemble members for the ELDA stream. It doubles the amount of retrieved ensemble members.</p></td> +<td><p>Each ensemble member is used to create a new synthesized ensemble member by subtracting 2 * ( current time step value - last time step value ) from the current time step value</p></td> +</tr> +<tr class="row-even"><td><p>ADDPAR</p></td> +<td><p>String [p1/p2/../pn]</p></td> +<td><p></p></td> +<td><p>None</p></td> +<td><p>Additional optional surface parameters (2D fields, non-accumulated) +Mostly: 27/28/173/186/187/188/235/139/39</p></td> +<td><p>Parameters can be specified as the Integer IDs or with the short names.</p></td> </tr> </tbody> </table> @@ -1145,7 +833,7 @@ Mostly: 27/28/173/186/187/188/235/139/39</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/ecmwf_env.html b/Documentation/html/Documentation/Input/ecmwf_env.html index e54ca2f5b5096dcd87d20fda5a562990405c38de..dba07cf730de153b4ce1cc0761103dd75d5c39be 100644 --- a/Documentation/html/Documentation/Input/ecmwf_env.html +++ b/Documentation/html/Documentation/Input/ecmwf_env.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -193,11 +193,11 @@ <div class="section" id="ecmwf-user-credential-file-ecmwf-env"> <h1>ECMWF User Credential file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code><a class="headerlink" href="#ecmwf-user-credential-file-ecmwf-env" title="Permalink to this headline">¶</a></h1> -<p>This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/run</span></code> directory and will be created in the installation process for the application modes <strong>remote</strong> and <strong>gateway</strong>.</p> +<p>This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Run</span></code> directory and will be created in the installation process for the application modes <strong>remote</strong> and <strong>gateway</strong>.</p> <p>This file is based on the template <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV.template</span></code> which is located in the <code class="docutils literal notranslate"><span class="pre">templates</span></code> directory.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">In the <strong>local</strong> mode it is not present.</p> +<p class="admonition-title">Note</p> +<p>In the <strong>local</strong> mode this file is not present.</p> </div> <div class="section" id="content-of-ecmwf-env"> <h2>Content of <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code><a class="headerlink" href="#content-of-ecmwf-env" title="Permalink to this headline">¶</a></h2> @@ -233,7 +233,7 @@ DESTINATION destination_name <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/examples.html b/Documentation/html/Documentation/Input/examples.html index 53fffd27fef269879327f8df5cc6daa8916aaa7e..f2fc4f4c9125b2803c3e6d0dd8ad7f701ae162af 100644 --- a/Documentation/html/Documentation/Input/examples.html +++ b/Documentation/html/Documentation/Input/examples.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -192,13 +192,13 @@ <div class="section" id="control-file-examples"> <h1>CONTROL file examples<a class="headerlink" href="#control-file-examples" title="Permalink to this headline">¶</a></h1> -<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> has a couple of example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files for a number of different data set constellations in the directory path <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/run/control</span></code>.</p> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> has a couple of example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files for a number of different data set constellations in the directory path <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Run/Control</span></code>.</p> <p>Here is a list of the example files and a description of the data set:</p> -<dl class="docutils"> -<dt>CONTROL.documentation</dt> -<dd>This file is not intended to be used with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. It has a list of all possible parameters and their default values for a quick overview.</dd> +<dl class="simple"> +<dt>CONTROL.documentation</dt><dd><p>This file is not intended to be used with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. It has a list of all possible parameters and their default values for a quick overview.</p> +</dd> </dl> -<p>CONTROL_CERA +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_CERA CONTROL_CERA.global CONTROL_CERA.public CONTROL_EA5 @@ -220,7 +220,9 @@ CONTROL_OD.OPER.FC.eta.highres CONTROL_OD.OPER.FC.gauss.highres CONTROL_OD.OPER.FC.operational CONTROL_OD.OPER.FC.twiceaday.1hourly -CONTROL_OD.OPER.FC.twiceaday.3hourly</p> +CONTROL_OD.OPER.FC.twiceaday.3hourly +</pre></div> +</div> <div class="toctree-wrapper compound"> </div> </div> @@ -245,7 +247,7 @@ CONTROL_OD.OPER.FC.twiceaday.3hourly</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/fortran_makefile.html b/Documentation/html/Documentation/Input/fortran_makefile.html index a0a062ee039ceb62586a22c625adff1fdcfff52f..3772226a9a17b15284ca7823b3bff4c720d0d49a 100644 --- a/Documentation/html/Documentation/Input/fortran_makefile.html +++ b/Documentation/html/Documentation/Input/fortran_makefile.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>The Fortran Makefile - CONVERT2 — flex_extract 7.1 alpha documentation</title> + <title>The Fortran Makefile - calc_etadot — flex_extract 7.1 alpha documentation</title> @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3 current"><a class="current reference internal" href="#">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a><ul class="simple"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a><ul class="simple"> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> @@ -171,7 +171,7 @@ <li><a href="../input.html">Control & Input Data</a> »</li> - <li>The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></li> + <li>The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></li> <li class="wy-breadcrumbs-aside"> @@ -190,24 +190,24 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - <div class="section" id="the-fortran-makefile-convert2"> -<h1>The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code><a class="headerlink" href="#the-fortran-makefile-convert2" title="Permalink to this headline">¶</a></h1> + <div class="section" id="the-fortran-makefile-calc-etadot"> +<h1>The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code><a class="headerlink" href="#the-fortran-makefile-calc-etadot" title="Permalink to this headline">¶</a></h1> <p id="ref-convert"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code>’s Fortran program will be compiled during -the installation process to get the executable named <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code>.</p> -<p><code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> has a couple of <code class="docutils literal notranslate"><span class="pre">Makefiles</span></code> prepared which can be found in the directory -<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/source/fortran</span></code>, where <code class="docutils literal notranslate"><span class="pre">vX.X</span></code> should be substituted with the current version number. -A list of these <code class="docutils literal notranslate"><span class="pre">Makefiles</span></code> are shown below:</p> +the installation process to get the executable named <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code>.</p> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> has a couple of <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> prepared which can be found in the directory +<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Fortran</span></code>, where <code class="docutils literal notranslate"><span class="pre">vX.X</span></code> should be substituted with the current version number. +A list of these <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> are shown below:</p> <div class="line-block"> <div class="line"><strong>Remote/Gateway mode</strong>:</div> <div class="line">Files to be used as they are!</div> </div> <blockquote> <div><div class="line-block"> -<div class="line"><strong>Makefile.gfortran</strong></div> +<div class="line"><strong>makefile_ecgate</strong></div> <div class="line">For the use on ECMWF’s server <strong>ecgate</strong>.</div> </div> <div class="line-block"> -<div class="line"><strong>Makefile.CRAY</strong></div> +<div class="line"><strong>makefile_cray</strong></div> <div class="line">For the use on ECMWF’s server <strong>cca/ccb</strong>.</div> </div> </div></blockquote> @@ -217,15 +217,15 @@ A list of these <code class="docutils literal notranslate"><span class="pre">Mak </div> <blockquote> <div><div class="line-block"> -<div class="line"><strong>Makefile.local.gfortran</strong></div> -<div class="line">For the use with gfortran compiler.</div> +<div class="line"><strong>makefile_fast</strong></div> +<div class="line">For the use with gfortran compiler and optimization mode.</div> </div> <div class="line-block"> -<div class="line"><strong>Makefile.local.ifort</strong></div> -<div class="line">For the use with ifort compiler.</div> +<div class="line"><strong>makefile_debug</strong></div> +<div class="line">For the use with gfortran compiler in debugging mode.</div> </div> </div></blockquote> -<p>For instructions on how to adapt the <code class="docutils literal notranslate"><span class="pre">Makefiles</span></code> for the local application mode +<p>For instructions on how to adapt the <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> for the local application mode please see <a class="reference internal" href="../../Installation/local.html#ref-install-local"><span class="std std-ref">Local installation</span></a>.</p> <div class="toctree-wrapper compound"> </div> @@ -251,7 +251,7 @@ please see <a class="reference internal" href="../../Installation/local.html#ref <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/jobscript.html b/Documentation/html/Documentation/Input/jobscript.html index 28e9bc4edbc5ffd6cc3deadf2d3c05dac16689b2..9c54826b14dc655d77a74912a1553cdfbf447681 100644 --- a/Documentation/html/Documentation/Input/jobscript.html +++ b/Documentation/html/Documentation/Input/jobscript.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3 current"><a class="current reference internal" href="#">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a><ul> <li class="toctree-l4"><a class="reference internal" href="#what-does-the-jobscript-do">What does the jobscript do?</a></li> @@ -195,8 +195,8 @@ <div class="section" id="the-jobscript-job-ksh"> <h1>The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code><a class="headerlink" href="#the-jobscript-job-ksh" title="Permalink to this headline">¶</a></h1> <p>The jobscript is a Korn-shell script which will be created at runtime for each <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> execution in the application modes <strong>remote</strong> and <strong>gateway</strong>.</p> -<p>It is based on the <code class="docutils literal notranslate"><span class="pre">job.temp</span></code> template file which is stored in the <code class="docutils literal notranslate"><span class="pre">templates</span></code> directory. -This template is by itself generated in the installation process from a <code class="docutils literal notranslate"><span class="pre">jobscript.template</span></code> template file.</p> +<p>It is based on the <code class="docutils literal notranslate"><span class="pre">job.temp</span></code> template file which is stored in the <code class="docutils literal notranslate"><span class="pre">Templates</span></code> directory. +This template is by itself generated in the installation process from a <code class="docutils literal notranslate"><span class="pre">job.template</span></code> template file.</p> <p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> uses the python package <a class="reference external" href="https://genshi.edgewall.org/">genshi</a> to generate the Korn-shell script from the template files by substituting the individual parameters. These individual parameters are marked by a doubled <code class="docutils literal notranslate"><span class="pre">$</span></code> sign in <code class="docutils literal notranslate"><span class="pre">job.temp</span></code>.</p> @@ -207,13 +207,13 @@ server system to load the necessary modules for the environment when submitted t <h2>What does the jobscript do?<a class="headerlink" href="#what-does-the-jobscript-do" title="Permalink to this headline">¶</a></h2> <blockquote> <div><ol class="arabic simple"> -<li>It sets necessary batch system parameters</li> -<li>It prepares the job environment at the ECMWF servers by loading the necessary library modules</li> -<li>It sets some environment variabels for the single session</li> -<li>It creates the directory structure in the users <code class="docutils literal notranslate"><span class="pre">$SCRATCH</span></code> file system</li> -<li>It creates a CONTROL file on the ECMWF servers whith the parameters set before creating the <code class="docutils literal notranslate"><span class="pre">jobscript.ksh</span></code>. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> has a set of parameters which are given to the jobscript with its default or the user defined values. It also sets the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> as an environment variable.</li> -<li><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is started from within the <code class="docutils literal notranslate"><span class="pre">work</span></code> directory of the new directory structure by calling the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script. It sets new pathes for input and output directory and the recently generated <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</li> -<li>At the end it checks if the script returned an error or not and send the log file via email to the user.</li> +<li><p>It sets necessary batch system parameters</p></li> +<li><p>It prepares the job environment at the ECMWF servers by loading the necessary library modules</p></li> +<li><p>It sets some environment variabels for the single session</p></li> +<li><p>It creates the directory structure in the users <code class="docutils literal notranslate"><span class="pre">$SCRATCH</span></code> file system</p></li> +<li><p>It creates a CONTROL file on the ECMWF servers whith the parameters set before creating the <code class="docutils literal notranslate"><span class="pre">jobscript.ksh</span></code>. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> has a set of parameters which are given to the jobscript with its default or the user defined values. It also sets the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> as an environment variable.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is started from within the <code class="docutils literal notranslate"><span class="pre">work</span></code> directory of the new directory structure by calling the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script. It sets new pathes for input and output directory and the recently generated <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</p></li> +<li><p>At the end it checks if the script returned an error or not and send the log file via email to the user.</p></li> </ol> </div></blockquote> </div> @@ -255,7 +255,7 @@ server system to load the necessary modules for the environment when submitted t module load python3 module load eccodes/2.12.0 module load emos/455-r64 - <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span>:<span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_v7.1/source/python + <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span>:<span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_v7.1/Source/Python <span class="p">;;</span> *cca*<span class="o">)</span> module unload python @@ -264,7 +264,7 @@ server system to load the necessary modules for the environment when submitted t module load eccodes/2.12.0 module load emos <span class="nb">export</span> <span class="nv">SCRATCH</span><span class="o">=</span><span class="si">${</span><span class="nv">TMPDIR</span><span class="si">}</span> - <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span>:<span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_v7.1/source/python + <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span>:<span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/flex_extract_v7.1/Source/Python <span class="p">;;</span> <span class="k">esac</span> @@ -394,7 +394,7 @@ submit.py --controlfile<span class="o">=</span><span class="si">${</span><span c <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/run.html b/Documentation/html/Documentation/Input/run.html index d9a9b1778dbec30a4b7e4a845c251575bdffb6c5..3fac39c824cf62da860519963c5ee588cb84a525 100644 --- a/Documentation/html/Documentation/Input/run.html +++ b/Documentation/html/Documentation/Input/run.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -39,7 +39,7 @@ <link rel="index" title="Index" href="../../genindex.html" /> <link rel="search" title="Search" href="../../search.html" /> <link rel="next" title="The Jobscript job.ksh" href="jobscript.html" /> - <link rel="prev" title="The Fortran Makefile - CONVERT2" href="fortran_makefile.html" /> + <link rel="prev" title="The Fortran Makefile - calc_etadot" href="fortran_makefile.html" /> </head> <body class="wy-body-for-nav"> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3 current"><a class="current reference internal" href="#">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a><ul> <li class="toctree-l4"><a class="reference internal" href="#submission-parameter">Submission Parameter</a></li> <li class="toctree-l4"><a class="reference internal" href="#content-of-run-sh">Content of <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> @@ -200,277 +200,162 @@ The Python script constitutes the entry point to ECMWF data retrievals with <cod <p><code class="docutils literal notranslate"><span class="pre">submit.py</span></code> has two (three) sources for input parameters with information about program flow and ECMWF data selection, the so-called <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file, the command line parameters and the so-called <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> file. Whereby, the command line parameters will override the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file parameters.</p> <p>Based on these input information <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> applies one of the application modes to either retrieve the ECMWF data via a Web API on a local maschine or submit a jobscript to ECMWF servers and retrieve the data there with sending the files to the local system eventually.</p> -<p>PUT IN HERE A BLOCKDIAGRAM OF RAW PROGRAM FLOW</p> <div class="section" id="submission-parameter"> <h2>Submission Parameter<a class="headerlink" href="#submission-parameter" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id1"> +<table class="docutils align-default" id="id1"> <caption><span class="caption-text">Parameter for Submission</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="12%" /> -<col width="9%" /> -<col width="9%" /> -<col width="9%" /> -<col width="27%" /> -<col width="33%" /> +<col style="width: 12%" /> +<col style="width: 9%" /> +<col style="width: 9%" /> +<col style="width: 9%" /> +<col style="width: 27%" /> +<col style="width: 33%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">PARAMETER</th> -<th class="head">Datatype</th> -<th class="head">Possible values</th> -<th class="head">Default</th> -<th class="head">Description</th> -<th class="head">Specifics / Conditions</th> +<thead> +<tr class="row-odd"><th class="head"><p>PARAMETER</p></th> +<th class="head"><p>Datatype</p></th> +<th class="head"><p>Possible values</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> +<th class="head"><p>Specifics / Conditions</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">START_DATE</p> -</td> -<td><p class="first last">String YYYYMMDD</p> -</td> -<td><p class="first last">depends on dataset</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The first day of the retrieval period.</p> -</td> -<td><p class="first last">If END_DATE is set, START_DATE must be greater than END_DATE.</p> -</td> +<tbody> +<tr class="row-even"><td><p>START_DATE</p></td> +<td><p>String YYYYMMDD</p></td> +<td><p>depends on dataset</p></td> +<td><p>None</p></td> +<td><p>The first day of the retrieval period.</p></td> +<td><p>If END_DATE is set, START_DATE must be greater than END_DATE.</p></td> </tr> -<tr class="row-odd"><td><p class="first last">END_DATE</p> -</td> -<td><p class="first last">String YYYYMMDD</p> -</td> -<td><p class="first last">depends on dataset</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The last day of the retrieval period. For a one day retrieval it has to be the same date as START_DATE. If not set, it is automatically equal to START_DATE. </p> -</td> -<td><p class="first last">Doesn’t have to be set. If set, it has to be greater or equal than START_DATE.</p> -</td> +<tr class="row-odd"><td><p>END_DATE</p></td> +<td><p>String YYYYMMDD</p></td> +<td><p>depends on dataset</p></td> +<td><p>None</p></td> +<td><p>The last day of the retrieval period. For a one day retrieval it has to be the same date as START_DATE. If not set, it is automatically equal to START_DATE. </p></td> +<td><p>Doesn’t have to be set. If set, it has to be greater or equal than START_DATE.</p></td> </tr> -<tr class="row-even"><td><p class="first last">DATE_CHUNK</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">depends on resolution</p> -</td> -<td><p class="first last">3</p> -</td> -<td><p class="first last">Maximum number of days retrieved within one MARS request. </p> -</td> -<td><p class="first last">This number is limited due to maximum allowed memory and time limit for one MARS request. Be careful in changing this number. It can be larger for reanalysis data but may be too large for very high resolution retrievals.</p> -</td> +<tr class="row-even"><td><p>DATE_CHUNK</p></td> +<td><p>Integer</p></td> +<td><p>depends on resolution</p></td> +<td><p>3</p></td> +<td><p>Maximum number of days retrieved within one MARS request. </p></td> +<td><p>This number is limited due to maximum allowed memory and time limit for one MARS request. Be careful in changing this number. It can be larger for reanalysis data but may be too large for very high resolution retrievals.</p></td> </tr> -<tr class="row-odd"><td><p class="first last">JOB_CHUNK</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">depends on resolution</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last"># of days to be retrieved within a single job</p> -</td> -<td><p class="first last">Can be selected to start the submit script once and let it automatically divide the time period in smaller job chunks. Might be very useful for example if one would like to retrieve one month with 0.1° space resolution and 1h time resolution. Then only 1 day per job is possible.</p> -</td> +<tr class="row-odd"><td><p>JOB_CHUNK</p></td> +<td><p>Integer</p></td> +<td><p>depends on resolution</p></td> +<td><p>None</p></td> +<td><p># of days to be retrieved within a single job</p></td> +<td><p>Can be selected to start the submit script once and let it automatically divide the time period in smaller job chunks. Might be very useful for example if one would like to retrieve one month with 0.1° space resolution and 1h time resolution. Then only 1 day per job is possible.</p></td> </tr> -<tr class="row-even"><td><p class="first last">CONTROLFILE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any CONTROL file</p> -</td> -<td><p class="first last">CONTROL_EA5</p> -</td> -<td><p class="first last">The file with all CONTROL parameters.</p> -</td> -<td><p class="first last"></p> -</td> +<tr class="row-even"><td><p>CONTROLFILE</p></td> +<td><p>String</p></td> +<td><p>any CONTROL file</p></td> +<td><p>CONTROL_EA5</p></td> +<td><p>The file with all CONTROL parameters.</p></td> +<td><p></p></td> </tr> -<tr class="row-odd"><td><p class="first last">BASETIME</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0; 12]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This parameter is intended for half-day retrievals. Only half a day will be retrieved starting from BASETIME going back 12 hours. E.g. 20180510 with a BASETIME = 00 would lead to a data retrieval of 20180509 12h until 20180510 00h.</p> -</td> -<td><p class="first last">Can be set to 00 or 12 only.</p> -</td> +<tr class="row-odd"><td><p>BASETIME</p></td> +<td><p>Integer</p></td> +<td><p>[0; 12]</p></td> +<td><p>None</p></td> +<td><p>This parameter is intended for half-day retrievals. Only half a day will be retrieved starting from BASETIME going back 12 hours. E.g. 20180510 with a BASETIME = 00 would lead to a data retrieval of 20180509 12h until 20180510 00h.</p></td> +<td><p>Can be set to 00 or 12 only.</p></td> </tr> -<tr class="row-even"><td><p class="first last">STEP</p> -</td> -<td><p class="first last">list of String [xx xx … xx] or as String [x/to/x]</p> -</td> -<td><p class="first last">[00 - max available STEP in data set]</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This is the forecast time step in hours for each corresponding field type (TYPE). Counting of the steps starts from the forecast times. E.g. In Era-Interim, for forecasts at 3, 6, 9 UTC the STEPS 3,6 and 9 are used and the forecast TIME 00 UTC. </p> -</td> -<td><p class="first last">Has to have the same amount of values as in TYPE and TIME! For analysis (AN) fields the STEP has to be 00 always! It is more easily set in the CONTROL file. For pure forecast modes it might be set here as e.g. 0/to/36</p> -</td> +<tr class="row-even"><td><p>STEP</p></td> +<td><p>list of String [xx xx … xx] or as String [x/to/x]</p></td> +<td><p>[00 - max available STEP in data set]</p></td> +<td><p>None</p></td> +<td><p>This is the forecast time step in hours for each corresponding field type (TYPE). Counting of the steps starts from the forecast times. E.g. In Era-Interim, for forecasts at 3, 6, 9 UTC the STEPS 3,6 and 9 are used and the forecast TIME 00 UTC. </p></td> +<td><p>Has to have the same amount of values as in TYPE and TIME! For analysis (AN) fields the STEP has to be 00 always! It is more easily set in the CONTROL file. For pure forecast modes it might be set here as e.g. 0/to/36</p></td> </tr> -<tr class="row-odd"><td><p class="first last">LEVELIST</p> -</td> -<td><p class="first last">String [start/to/end]</p> -</td> -<td><p class="first last">1/to/137; depends on dataset</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">List of vertical levels for MARS request. It can be a subset of levels but it has to include the maximum level (end).</p> -</td> -<td><p class="first last">If full list of levels is needed and parameter LEVEL is set, the LEVELIST parameter is not needed. “end” has to be the maximum number of possible levels and has to be the same as in LEVEL, if specified.</p> -</td> +<tr class="row-odd"><td><p>LEVELIST</p></td> +<td><p>String [start/to/end]</p></td> +<td><p>1/to/137; depends on dataset</p></td> +<td><p>None</p></td> +<td><p>List of vertical levels for MARS request. It can be a subset of levels but it has to include the maximum level (end).</p></td> +<td><p>If full list of levels is needed and parameter LEVEL is set, the LEVELIST parameter is not needed. “end” has to be the maximum number of possible levels and has to be the same as in LEVEL, if specified.</p></td> </tr> -<tr class="row-even"><td><p class="first last">AREA</p> -</td> -<td><p class="first last">Double [f/f/f/f]</p> -</td> -<td><p class="first last">any float within lat and lon boundaries</p> -</td> -<td><p class="first last">‘’</p> -</td> -<td><p class="first last">Area defined as north/west/south/east</p> -</td> -<td><p class="first last"></p> -</td> +<tr class="row-even"><td><p>AREA</p></td> +<td><p>Double [f/f/f/f]</p></td> +<td><p>any float within lat and lon boundaries</p></td> +<td><p>‘’</p></td> +<td><p>Area defined as north/west/south/east</p></td> +<td><p></p></td> </tr> -<tr class="row-odd"><td><p class="first last">DEBUG</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Debug mode - leave temporary files intact</p> -</td> -<td><p class="first last">Usually only the final FLEXPART inputfiles are saved.</p> -</td> +<tr class="row-odd"><td><p>DEBUG</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Debug mode - leave temporary files intact</p></td> +<td><p>Usually only the final FLEXPART inputfiles are saved.</p></td> </tr> -<tr class="row-even"><td><p class="first last">OPER</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Operational mode - prepares dates with environment variables</p> -</td> -<td><p class="first last"></p> -</td> +<tr class="row-even"><td><p>OPER</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Operational mode - prepares dates with environment variables</p></td> +<td><p></p></td> </tr> -<tr class="row-odd"><td><p class="first last">REQUEST</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1,2]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">List all mars requests with its specifc values in file mars_requests.dat</p> -</td> -<td><p class="first last">Very useful for documentation or debugging reasons.</p> -</td> +<tr class="row-odd"><td><p>REQUEST</p></td> +<td><p>Integer</p></td> +<td><p>[0,1,2]</p></td> +<td><p>0</p></td> +<td><p>List all mars requests with its specifc values in file mars_requests.dat</p></td> +<td><p>Very useful for documentation or debugging reasons.</p></td> </tr> -<tr class="row-even"><td><p class="first last">PUBLIC</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Public mode - retrieves the public datasets</p> -</td> -<td><p class="first last">IMPORTANT: This is necessary to select for each PUBLIC user!</p> -</td> +<tr class="row-even"><td><p>PUBLIC</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Public mode - retrieves the public datasets</p></td> +<td><p>IMPORTANT: This is necessary to select for each PUBLIC user!</p></td> </tr> -<tr class="row-odd"><td><p class="first last">RRINT</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last">[0,1]</p> -</td> -<td><p class="first last">0</p> -</td> -<td><p class="first last">Selection of old or new precipitation interpolation ; +<tr class="row-odd"><td><p>RRINT</p></td> +<td><p>Integer</p></td> +<td><p>[0,1]</p></td> +<td><p>0</p></td> +<td><p>Selection of old or new precipitation interpolation ; 0 - old method; - 1 - new method (additional subgrid points)</p> -</td> -<td><p class="first last">IMPORTANT: If this new method is used, each single GRIB file will contain 3 fields for the large scale and 3 fields for the convective precipitation. They can be distinguished by the “stepRange” keyword in the GribMessages. StepRange = 0 : original time step; stepRange = 1 : first subgrid point; stepRange = 2 : second subgrid point </p> -</td> + 1 - new method (additional subgrid points)</p></td> +<td><p>IMPORTANT: If this new method is used, each single GRIB file will contain 3 fields for the large scale and 3 fields for the convective precipitation. They can be distinguished by the “stepRange” keyword in the GribMessages. StepRange = 0 : original time step; stepRange = 1 : first subgrid point; stepRange = 2 : second subgrid point </p></td> </tr> -<tr class="row-even"><td><p class="first last">INPUTDIR</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any path</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Path to the temporary directory for the retrieval grib files and other processing files.</p> -</td> -<td><p class="first last">The temporary directory will be created if it does not already exist.</p> -</td> +<tr class="row-even"><td><p>INPUTDIR</p></td> +<td><p>String</p></td> +<td><p>any path</p></td> +<td><p>None</p></td> +<td><p>Path to the temporary directory for the retrieval grib files and other processing files.</p></td> +<td><p>The temporary directory will be created if it does not already exist.</p></td> </tr> -<tr class="row-odd"><td><p class="first last">OUTPUTDIR</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any path</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Path to the final directory where the final FLEXPART ready input files are stored.</p> -</td> -<td><p class="first last">The final output directory will be created if it does not already exist.</p> -</td> +<tr class="row-odd"><td><p>OUTPUTDIR</p></td> +<td><p>String</p></td> +<td><p>any path</p></td> +<td><p>None</p></td> +<td><p>Path to the final directory where the final FLEXPART ready input files are stored.</p></td> +<td><p>The final output directory will be created if it does not already exist.</p></td> </tr> -<tr class="row-even"><td><p class="first last">PPID</p> -</td> -<td><p class="first last">Integer</p> -</td> -<td><p class="first last"></p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">This is the specify parent process id of a single flex_extract run to identify the files. It is the second number in the GRIB files.</p> -</td> -<td><p class="first last">This is usually only necessary if the GRIB data were retrieved and a rerun of prepare_flexpart has to be done. Then ppid is used to select the files. </p> -</td> +<tr class="row-even"><td><p>PPID</p></td> +<td><p>Integer</p></td> +<td><p></p></td> +<td><p>None</p></td> +<td><p>This is the specify parent process id of a single flex_extract run to identify the files. It is the second number in the GRIB files.</p></td> +<td><p>This is usually only necessary if the GRIB data were retrieved and a rerun of prepare_flexpart has to be done. Then ppid is used to select the files. </p></td> </tr> -<tr class="row-odd"><td><p class="first last">JOB_TEMPLATE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">job.temp</p> -</td> -<td><p class="first last">job.temp</p> -</td> -<td><p class="first last">The job template file which are adapted to be submitted to the batch system on ECMWF server.</p> -</td> -<td><p class="first last"></p> -</td> +<tr class="row-odd"><td><p>JOB_TEMPLATE</p></td> +<td><p>String</p></td> +<td><p>job.temp</p></td> +<td><p>job.temp</p></td> +<td><p>The job template file which are adapted to be submitted to the batch system on ECMWF server.</p></td> +<td><p></p></td> </tr> -<tr class="row-even"><td><p class="first last">QUEUE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">ecgate, cca, ccb</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The ECMWF server name for submission of the job script to the batch system.</p> -</td> -<td><p class="first last"></p> -</td> +<tr class="row-even"><td><p>QUEUE</p></td> +<td><p>String</p></td> +<td><p>ecgate, cca, ccb</p></td> +<td><p>None</p></td> +<td><p>The ECMWF server name for submission of the job script to the batch system.</p></td> +<td><p></p></td> </tr> </tbody> </table> @@ -507,8 +392,8 @@ the command line parameters and the so-called <code class="docutils literal notr <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETERS:</span> <span class="nv">QUEUE</span><span class="o">=</span><span class="s1">'ecgate'</span> -<span class="nv">START_DATE</span><span class="o">=</span><span class="m">20190101</span> -<span class="nv">END_DATE</span><span class="o">=</span><span class="m">20190101</span> +<span class="nv">START_DATE</span><span class="o">=</span>None +<span class="nv">END_DATE</span><span class="o">=</span>None <span class="nv">DATE_CHUNK</span><span class="o">=</span>None <span class="nv">JOB_CHUNK</span><span class="o">=</span><span class="m">3</span> <span class="nv">BASETIME</span><span class="o">=</span>None @@ -520,7 +405,7 @@ the command line parameters and the so-called <code class="docutils literal notr <span class="nv">PP_ID</span><span class="o">=</span>None <span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">'job.temp'</span> <span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> -<span class="nv">DEBUG</span><span class="o">=</span><span class="m">1</span> +<span class="nv">DEBUG</span><span class="o">=</span><span class="m">0</span> <span class="nv">REQUEST</span><span class="o">=</span><span class="m">2</span> <span class="nv">PUBLIC</span><span class="o">=</span><span class="m">0</span> @@ -600,7 +485,7 @@ the command line parameters and the so-called <code class="docutils literal notr <div class="section" id="usage-of-submit-py-optional"> <span id="ref-install-script"></span><h2>Usage of <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> (optional)<a class="headerlink" href="#usage-of-submit-py-optional" title="Permalink to this headline">¶</a></h2> <p>It is also possible to start <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directly from command line by using the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script instead of the wrapping Shell script <code class="docutils literal notranslate"><span class="pre">run.sh</span></code>. This top-level script is located in -<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/source/python</span></code> and is executable. With the <code class="docutils literal notranslate"><span class="pre">help</span></code> parameter we see again all possible +<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Python</span></code> and is executable. With the <code class="docutils literal notranslate"><span class="pre">help</span></code> parameter we see again all possible command line parameter.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>submit.py --help @@ -678,7 +563,7 @@ usage: submit.py <span class="o">[</span>-h<span class="o">]</span> <span class= <a href="jobscript.html" class="btn btn-neutral float-right" title="The Jobscript job.ksh" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="fortran_makefile.html" class="btn btn-neutral float-left" title="The Fortran Makefile - CONVERT2" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="fortran_makefile.html" class="btn btn-neutral float-left" title="The Fortran Makefile - calc_etadot" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> @@ -687,7 +572,7 @@ usage: submit.py <span class="o">[</span>-h<span class="o">]</span> <span class= <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/setup.html b/Documentation/html/Documentation/Input/setup.html index 410473dcf350d0233fa6806e249682edc8aea416..3c60d5f283ab3c506e1bd587bebc70785c4fe41d 100644 --- a/Documentation/html/Documentation/Input/setup.html +++ b/Documentation/html/Documentation/Input/setup.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -102,7 +102,7 @@ </ul> </li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -198,138 +198,93 @@ <p>The installation of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is done by the Shell script <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> which is located in the root directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. It calls the top-level Python script <code class="docutils literal notranslate"><span class="pre">install.py</span></code> which does all necessary operations to prepare the selected application environment. This includes:</p> <ul class="simple"> -<li>preparing the file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> with the user credentials for member state access to ECMWF servers (in <strong>remote</strong> and <strong>gateway</strong> mode)</li> -<li>preparation of a compilation Korn-shell script (in <strong>remote</strong> and <strong>gateway</strong> mode)</li> -<li>preparation of a job template with user credentials (in <strong>remote</strong> and <strong>gateway</strong> mode)</li> -<li>create a tar-ball of all necessary files</li> -<li>copying tar-ball to target location (depending on application mode and installation path)</li> -<li>submit compilation script to batch queue at ECMWF servers (in <strong>remote</strong> and <strong>gateway</strong> mode) or just untar tar-ball at target location (<strong>local mode</strong>)</li> -<li>compilation of the FORTRAN90 program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></li> +<li><p>preparing the file <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> with the user credentials for member state access to ECMWF servers (in <strong>remote</strong> and <strong>gateway</strong> mode)</p></li> +<li><p>preparation of a compilation Korn-shell script (in <strong>remote</strong> and <strong>gateway</strong> mode)</p></li> +<li><p>preparation of a job template with user credentials (in <strong>remote</strong> and <strong>gateway</strong> mode)</p></li> +<li><p>create a tar-ball of all necessary files</p></li> +<li><p>copying tar-ball to target location (depending on application mode and installation path)</p></li> +<li><p>submit compilation script to batch queue at ECMWF servers (in <strong>remote</strong> and <strong>gateway</strong> mode) or just untar tar-ball at target location (<strong>local mode</strong>)</p></li> +<li><p>compilation of the FORTRAN90 program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></p></li> </ul> <p>The Python installation script <code class="docutils literal notranslate"><span class="pre">install.py</span></code> has a couple of command line arguments which are defined in <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> in the section labelled with “<em>AVAILABLE COMMANDLINE ARGUMENTS TO SET</em>”. The user has to adapt these parameters for his personal use. The parameters are listed and described in <a class="reference internal" href="#ref-instparams"><span class="std std-ref">Installation Parameter</span></a>. The script also does some checks to guarantee necessary parameters were set.</p> <p>After the installation process, some tests can be conducted. They are described in section <a class="reference internal" href="../../installation.html#ref-testinstallfe"><span class="std std-ref">Test installation</span></a>.</p> <p>The following diagram sketches the involved files and scripts in the installation process:</p> -<div><img height="440" id="ref-install-blockdiag" src="../../_images/blockdiag-f0a58657deb31f0c134ffed39d9be96f0d278617.png" width="1600" /></div><div class="figure" id="id1"> +<div><img height="440" id="ref-install-blockdiag" src="../../_images/blockdiag-f0a58657deb31f0c134ffed39d9be96f0d278617.png" width="1600" /></div><div class="figure align-default" id="id1"> <div><img height="120" src="../../_images/blockdiag-c5183a0da960384d172e76fcbb0cc6765f0b1945.png" width="832" /></div><p class="caption"><span class="caption-text">Diagram of data flow during the installation process. The trapezoids are input files with the light blue area being the template files. The edge-rounded, orange boxes are the executable files which start the installation process and reads the input files. The rectangular, green boxes are the output files. The light green files are files which are only needed in the remota and gateway mode.</span><a class="headerlink" href="#id1" title="Permalink to this image">¶</a></p> </div> <div class="section" id="installation-parameter"> <span id="ref-instparams"></span><h2>Installation Parameter<a class="headerlink" href="#installation-parameter" title="Permalink to this headline">¶</a></h2> -<table border="1" class="docutils" id="id2"> +<table class="docutils align-default" id="id2"> <caption><span class="caption-text">Parameter for Installation</span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="10%" /> -<col width="5%" /> -<col width="15%" /> -<col width="11%" /> -<col width="58%" /> +<col style="width: 10%" /> +<col style="width: 5%" /> +<col style="width: 15%" /> +<col style="width: 11%" /> +<col style="width: 58%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">Parameter</th> -<th class="head">Format</th> -<th class="head">Possible value range</th> -<th class="head">Default</th> -<th class="head">Description</th> +<thead> +<tr class="row-odd"><th class="head"><p>Parameter</p></th> +<th class="head"><p>Format</p></th> +<th class="head"><p>Possible value range</p></th> +<th class="head"><p>Default</p></th> +<th class="head"><p>Description</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td><p class="first last">TARGET</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">local, ecgate, cca</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">Defines which flex_extract application mode will be used. Local = local mode; egate = Remote or Gateway mode, cca = Remote or Gateway mode. Wether the local mode is for public or member state users doesn’t matter during the installation process.</p> -</td> +<tbody> +<tr class="row-even"><td><p>TARGET</p></td> +<td><p>String</p></td> +<td><p>local, ecgate, cca</p></td> +<td><p>None</p></td> +<td><p>Defines which flex_extract application mode will be used. Local = local mode; egate = Remote or Gateway mode, cca = Remote or Gateway mode. Wether the local mode is for public or member state users doesn’t matter during the installation process.</p></td> </tr> -<tr class="row-odd"><td><p class="first last">MAKEFILE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any Makefile present, according to environment</p> -</td> -<td><p class="first last">Makefile.gfortran</p> -</td> -<td><p class="first last">Name of the makefile in source/fortran directory to be used for compiling the Fortran program. “Makefile.gfortran” has the configuration for the ecgate environment. For local server versions there are templates “Makefile.local.gfortran” and “Makefile.local.ifort” which have to be adapted (pathes to the eccodes library) by the user.</p> -</td> +<tr class="row-odd"><td><p>MAKEFILE</p></td> +<td><p>String</p></td> +<td><p>any Makefile present, according to environment</p></td> +<td><p>Makefile.gfortran</p></td> +<td><p>Name of the makefile in source/fortran directory to be used for compiling the Fortran program. “Makefile.gfortran” has the configuration for the ecgate environment. For local server versions there are templates “Makefile.local.gfortran” and “Makefile.local.ifort” which have to be adapted (pathes to the eccodes library) by the user.</p></td> </tr> -<tr class="row-even"><td><p class="first last">ECUID</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">e.g. “ecname”</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The user id at ECMWF. Necessary for access to ECMWF server. (Remote and Gateway mode) </p> -</td> +<tr class="row-even"><td><p>ECUID</p></td> +<td><p>String</p></td> +<td><p>e.g. “ecname”</p></td> +<td><p>None</p></td> +<td><p>The user id at ECMWF. Necessary for access to ECMWF server. (Remote and Gateway mode) </p></td> </tr> -<tr class="row-odd"><td><p class="first last">ECGID</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">e.g. “groupname”</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The group id at ECMWF. Necessary for access to ECMWF server. (Remote and Gateway mode)</p> -</td> +<tr class="row-odd"><td><p>ECGID</p></td> +<td><p>String</p></td> +<td><p>e.g. “groupname”</p></td> +<td><p>None</p></td> +<td><p>The group id at ECMWF. Necessary for access to ECMWF server. (Remote and Gateway mode)</p></td> </tr> -<tr class="row-even"><td><p class="first last">GATEWAY</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any server adress</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The name of the local gateway server. Necessary for transfering files from the ECMWF servers to the local member state gateway server. (Gateway mode)</p> -</td> +<tr class="row-even"><td><p>GATEWAY</p></td> +<td><p>String</p></td> +<td><p>any server adress</p></td> +<td><p>None</p></td> +<td><p>The name of the local gateway server. Necessary for transfering files from the ECMWF servers to the local member state gateway server. (Gateway mode)</p></td> </tr> -<tr class="row-odd"><td><p class="first last">DESTINATION</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any destination which is stored at local gateway server</p> -</td> -<td><p class="first last">None</p> -</td> -<td><p class="first last">The ecaccess association, e.g. myUser@genericSftp. Used for transfering files from the ECMWF servers to the local member state gateway server. (Gateway mode)</p> -</td> +<tr class="row-odd"><td><p>DESTINATION</p></td> +<td><p>String</p></td> +<td><p>any destination which is stored at local gateway server</p></td> +<td><p>None</p></td> +<td><p>The ecaccess association, e.g. myUser@genericSftp. Used for transfering files from the ECMWF servers to the local member state gateway server. (Gateway mode)</p></td> </tr> -<tr class="row-even"><td><p class="first last">INSTALLDIR</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">a full path </p> -</td> -<td><p class="first last">$HOME on ECMWF server and current flex_extract root path on local server</p> -</td> -<td><p class="first last">Root path where flex_extract should be installed. If it is not set it will be set to $HOME on ECMWF server and set to the current flex_extract root path on local servers. </p> -</td> +<tr class="row-even"><td><p>INSTALLDIR</p></td> +<td><p>String</p></td> +<td><p>a full path </p></td> +<td><p>$HOME on ECMWF server and current flex_extract root path on local server</p></td> +<td><p>Root path where flex_extract should be installed. If it is not set it will be set to $HOME on ECMWF server and set to the current flex_extract root path on local servers. </p></td> </tr> -<tr class="row-odd"><td><p class="first last">JOB_TEMPLATE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">job.template</p> -</td> -<td><p class="first last">job.template</p> -</td> -<td><p class="first last">The rudimentary template file to create a batch job template for submission to ECMWF servers. Should not be changed since it is optimized for ECMWF server. (Remote and Gateway mode)</p> -</td> +<tr class="row-odd"><td><p>JOB_TEMPLATE</p></td> +<td><p>String</p></td> +<td><p>job.template</p></td> +<td><p>job.template</p></td> +<td><p>The rudimentary template file to create a batch job template for submission to ECMWF servers. Should not be changed since it is optimized for ECMWF server. (Remote and Gateway mode)</p></td> </tr> -<tr class="row-even"><td><p class="first last">CONTROLFILE</p> -</td> -<td><p class="first last">String</p> -</td> -<td><p class="first last">any CONTROL file</p> -</td> -<td><p class="first last">CONTROL_EA5</p> -</td> -<td><p class="first last">The file with all CONTROL parameters. It does not matter which CONTROL file is used. Due to interval process it is just necessary that there is a CONTROL file in place which can be opend. </p> -</td> +<tr class="row-even"><td><p>CONTROLFILE</p></td> +<td><p>String</p></td> +<td><p>any CONTROL file</p></td> +<td><p>CONTROL_EA5</p></td> +<td><p>The file with all CONTROL parameters. It does not matter which CONTROL file is used. Due to interval process it is just necessary that there is a CONTROL file in place which can be opend. </p></td> </tr> </tbody> </table> @@ -367,10 +322,10 @@ It calls the top-level Python script <code class="docutils literal notranslate"> <span class="c1">#</span> <span class="nv">TARGET</span><span class="o">=</span><span class="s1">'ecgate'</span> <span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_ecgate'</span> -<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'km4a'</span> -<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'at'</span> -<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'srvx8.img.univie.ac.at'</span> -<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'annep@genericSftp'</span> +<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'<username>'</span> +<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'<groupID>'</span> +<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'<gatewayname>'</span> +<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'<username>@genericSftp'</span> <span class="nv">INSTALLDIR</span><span class="o">=</span>None <span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">''</span> <span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> @@ -398,13 +353,16 @@ It calls the top-level Python script <code class="docutils literal notranslate"> <span class="c1"># CHECK FOR MORE PARAMETER </span> <span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$TARGET</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"ecgate"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$TARGET</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"cca"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="c1"># check if necessary Parameters are set</span> - <span class="k">if</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$ECUID</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$ECGID</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$GATEWAY</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$DESTINATION</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> - <span class="nb">echo</span> <span class="s2">"ERROR: At least one of the following parameters are not set: ECUID, ECGID, GATEWAY, DESTINATION!"</span> + <span class="k">if</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$ECUID</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$ECGID</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$ECUID</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"<username>"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$ECGID</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"<groupID>"</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + <span class="nb">echo</span> <span class="s2">"ERROR: At least one of the following parameters are not properly set: ECUID or ECGID!"</span> <span class="nb">echo</span> <span class="s2">"EXIT WITH ERROR"</span> <span class="nb">exit</span> <span class="k">else</span> <span class="nv">parameterlist</span><span class="o">+=</span><span class="s2">" --ecuid=</span><span class="nv">$ECUID</span><span class="s2"> --ecgid=</span><span class="nv">$ECGID</span><span class="s2"> --gateway=</span><span class="nv">$GATEWAY</span><span class="s2"> --destination=</span><span class="nv">$DESTINATION</span><span class="s2">"</span> <span class="k">fi</span> + <span class="k">if</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$GATEWAY</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> -z <span class="s2">"</span><span class="nv">$DESTINATION</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$GATEWAY</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"<gatewayname>"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$DESTINATION</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"<username>@genericSftp"</span> <span class="o">]</span> <span class="p">;</span> <span class="k">then</span> + <span class="nb">echo</span> <span class="s2">"WARNING: Not setting parameters GATEWAY and DESTINATION means there will be no file transfer to local gateway server."</span> + <span class="k">fi</span> <span class="k">fi</span> <span class="k">if</span> <span class="o">[</span> -n <span class="s2">"</span><span class="nv">$MAKEFILE</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nv">parameterlist</span><span class="o">+=</span><span class="s2">" --makefile=</span><span class="nv">$MAKEFILE</span><span class="s2">"</span> @@ -430,7 +388,7 @@ It calls the top-level Python script <code class="docutils literal notranslate"> <div class="section" id="usage-of-install-py-optional"> <span id="ref-install-script"></span><h2>Usage of <code class="docutils literal notranslate"><span class="pre">install.py</span></code> (optional)<a class="headerlink" href="#usage-of-install-py-optional" title="Permalink to this headline">¶</a></h2> <p>It is also possible to start the installation process of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directly from command line by using the <code class="docutils literal notranslate"><span class="pre">install.py</span></code> script instead of the wrapping Shell script <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code>. This top-level script is located in -<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/source/python</span></code> and is executable. With the <code class="docutils literal notranslate"><span class="pre">help</span></code> parameter we see again all possible +<code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Python</span></code> and is executable. With the <code class="docutils literal notranslate"><span class="pre">help</span></code> parameter we see again all possible command line parameter.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>install.py --help @@ -491,7 +449,7 @@ optional arguments: <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Input/templates.html b/Documentation/html/Documentation/Input/templates.html index 65aaf8f3e808e6bfb815f6bf22d2f31e84d3c956..cdd8aefbc464dd27f6a1e4ede8f263f664e0b168 100644 --- a/Documentation/html/Documentation/Input/templates.html +++ b/Documentation/html/Documentation/Input/templates.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="reference internal" href="../input.html">Control & Input Data</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="control.html">The CONTROL file</a></li> @@ -197,18 +197,18 @@ <div class="section" id="templates"> <h1>Templates<a class="headerlink" href="#templates" title="Permalink to this headline">¶</a></h1> -<p>In <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> we use the Python package <code class="docutils literal notranslate"><span class="pre">genshi</span></code> (<a class="reference external" href="https://genshi.edgewall.org/">ref</a>) to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code.</p> +<p>In <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> we use the Python package <a class="reference external" href="https://genshi.edgewall.org/">genshi</a> to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Usually it is not recommended to change anything in these files without being able to understand the effects.</p> +<p class="admonition-title">Note</p> +<p>Usually it is not recommended to change anything in these files without being able to understand the effects.</p> </div> <p>Each template file has its content framework and keeps so-called placeholder variables in the positions where the values needs to be substituted at run time. These placeholders are marked by a leading <code class="docutils literal notranslate"><span class="pre">$</span></code> sign. In case of the Kornshell job scripts, where (environment) variables are used the <code class="docutils literal notranslate"><span class="pre">$</span></code> sign needs to be doubled to <cite>escape</cite> and keep a single <code class="docutils literal notranslate"><span class="pre">$</span></code> sign as it is.</p> <p>The following templates are used and can be found in directory <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Templates</span></code>:</p> <div class="section" id="convert-nl"> <h2>convert.nl<a class="headerlink" href="#convert-nl" title="Permalink to this headline">¶</a></h2> <blockquote> -<div><p>This is the template for a Fortran namelist file called <code class="docutils literal notranslate"><span class="pre">fort.4</span></code> which will be read by <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code>. -It contains all the parameters <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> needs.</p> +<div><p>This is the template for a Fortran namelist file called <code class="docutils literal notranslate"><span class="pre">fort.4</span></code> which will be read by <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code>. +It contains all the parameters <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> needs.</p> <div class="highlight-fortran notranslate"><div class="highlight"><pre><span></span>&NAMGEN maxl = $maxl, maxb = $maxb, @@ -311,7 +311,7 @@ For the high performance computers <strong>cca</strong> and <strong>ccb</strong> mkdir -p <span class="nv">$$</span><span class="o">{</span>FLEXPART_ROOT_SCRIPTS<span class="o">}</span>/flex_extract_v<span class="nv">$$</span><span class="o">{</span>VERSION<span class="o">}</span> <span class="nb">cd</span> <span class="nv">$$</span><span class="o">{</span>FLEXPART_ROOT_SCRIPTS<span class="o">}</span>/flex_extract_v<span class="nv">$$</span><span class="o">{</span>VERSION<span class="o">}</span> <span class="c1"># if FLEXPART_ROOT is not set this means cd to the home directory</span> tar -xvf <span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span>/flex_extract_v<span class="nv">$$</span><span class="o">{</span>VERSION<span class="o">}</span>.tar -<span class="nb">cd</span> source/fortran +<span class="nb">cd</span> Source/Fortran <span class="se">\r</span>m *.o *.mod <span class="nv">$fortran_program</span> make -f <span class="nv">$$</span><span class="o">{</span>MAKEFILE<span class="o">}</span> >flexcompile <span class="m">2</span>>flexcompile @@ -373,7 +373,7 @@ For the high performance computers <strong>cca</strong> and <strong>ccb</strong> module load python3 module load eccodes/2.12.0 module load emos/455-r64 - <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="nv">$$</span><span class="o">{</span>PATH<span class="o">}</span>:<span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span>/flex_extract_v7.1/source/python + <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="nv">$$</span><span class="o">{</span>PATH<span class="o">}</span>:<span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span>/flex_extract_v7.1/Source/Python <span class="p">;;</span> *cca*<span class="o">)</span> module unload python @@ -382,7 +382,7 @@ For the high performance computers <strong>cca</strong> and <strong>ccb</strong> module load eccodes/2.12.0 module load emos <span class="nb">export</span> <span class="nv">SCRATCH</span><span class="o">=</span><span class="nv">$$</span><span class="o">{</span>TMPDIR<span class="o">}</span> - <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="nv">$$</span><span class="o">{</span>PATH<span class="o">}</span>:<span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span>/flex_extract_v7.1/source/python + <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="nv">$$</span><span class="o">{</span>PATH<span class="o">}</span>:<span class="nv">$$</span><span class="o">{</span>HOME<span class="o">}</span>/flex_extract_v7.1/Source/Python <span class="p">;;</span> <span class="k">esac</span> @@ -531,7 +531,7 @@ submit.py --controlfile<span class="o">=</span><span class="nv">$$$$</span><span <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Overview/app_modes.html b/Documentation/html/Documentation/Overview/app_modes.html index 31dfda026c277164824738e8d5e97e9c7a2840e8..7ee380c6851513179932ea2785328f5d4a5518f2 100644 --- a/Documentation/html/Documentation/Overview/app_modes.html +++ b/Documentation/html/Documentation/Overview/app_modes.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -186,40 +186,40 @@ <p id="ref-app-modes">Arising from the two user groups described in <a class="reference internal" href="../../Ecmwf/access.html"><span class="doc">Access Modes</span></a>, <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> has 4 different <span class="underline">user application modes</span>:</p> <blockquote id="ref-remote-desc"> <div><ol class="arabic simple"> -<li><dl class="first docutils"> -<dt>Remote (member)</dt> -<dd>In the <strong>Remote mode</strong> the user works directly on ECMWF Linux member state server, such as <code class="docutils literal notranslate"><span class="pre">ecgate</span></code> or <code class="docutils literal notranslate"><span class="pre">cca</span></code>. The software will be installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory. The user does not need to install any of the additional third-party libraries mentioned in <a class="reference internal" href="../../installation.html#ref-requirements"><span class="std std-ref">Dependencies</span></a> as ECMWF provides everything with environment modules. The module selection will be done automatically in <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</dd> +<li><dl class="simple"> +<dt>Remote (member)</dt><dd><p>In the <strong>Remote mode</strong> the user works directly on ECMWF Linux member state server, such as <code class="docutils literal notranslate"><span class="pre">ecgate</span></code> or <code class="docutils literal notranslate"><span class="pre">cca/ccb</span></code>. The software will be installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory. The user does not need to install any of the additional third-party libraries mentioned in <a class="reference internal" href="../../installation.html#ref-requirements"><span class="std std-ref">Dependencies</span></a> as ECMWF provides everything with environment modules. The module selection will be done automatically in <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +</dd> </dl> </li> </ol> </div></blockquote> <blockquote id="ref-gateway-desc"> <div><ol class="arabic simple" start="2"> -<li><dl class="first docutils"> -<dt>Gateway (member)</dt> -<dd>The <strong>Gateway mode</strong> can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool <code class="docutils literal notranslate"><span class="pre">ecaccess</span></code>. The installation script of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> must be executed at the local gateway server such that the software will be installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory at the ECMWF server and some extra setup is done in the local <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory at the local gateway server. For more information about establishing a gateway server please see section ???. For the <strong>Gateway mode</strong> the necessary environment has to be established which is described in <a class="reference internal" href="../../Installation/gateway.html#ref-prep-gateway"><span class="std std-ref">Prepare gateway environment</span></a>.</dd> +<li><dl class="simple"> +<dt>Gateway (member)</dt><dd><p>The <strong>Gateway mode</strong> can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool <code class="docutils literal notranslate"><span class="pre">ecaccess</span></code>. The installation script of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> must be executed at the local gateway server such that the software will be installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory at the ECMWF server and some extra setup is done in the local <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory at the local gateway server. For more information about establishing a gateway server please see <a class="reference external" href="https://confluence.ecmwf.int/display/ECAC/ECaccess+Home">ECMWF’s instructions on gateway server</a>. For the <strong>Gateway mode</strong> the necessary environment has to be established which is described in <a class="reference internal" href="../../Installation/gateway.html#ref-prep-gateway"><span class="std std-ref">Prepare gateway environment</span></a>.</p> +</dd> </dl> </li> </ol> </div></blockquote> <blockquote id="ref-local-desc"> <div><ol class="arabic simple" start="3"> -<li><dl class="first docutils"> -<dt>Local member</dt> -<dd>Scripts are installed and executed on a local machine, either in the current <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory or in a path given to the installation script. Under this scenario a software environment similar to that at ECMWF is required. Additionally, Web API’s have to be installed to access ECMWF server. The complete installation process is described in <a class="reference internal" href="../../Installation/local.html#ref-local-mode"><span class="std std-ref">Local mode - dependencies</span></a>.</dd> +<li><dl class="simple"> +<dt>Local member</dt><dd><p>Scripts are installed and executed on a local machine, either in the current <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory or in a path given to the installation script. Under this scenario a software environment similar to that at ECMWF is required. Additionally, Web API’s have to be installed to access ECMWF server. The complete installation process is described in <a class="reference internal" href="../../Installation/local.html#ref-local-mode"><span class="std std-ref">Local mode - dependencies</span></a>.</p> +</dd> </dl> </li> -<li><dl class="first docutils"> -<dt>Local public</dt> -<dd>Scripts are installed and executed on a local machine, either in the current <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory or in a path given to the installation script. Under this scenario a software environment similar to that at ECMWF is required. Additionally, Web API’s have to be installed to access ECMWF server. The complete installation process is described in <a class="reference internal" href="../../Installation/local.html#ref-local-mode"><span class="std std-ref">Local mode - dependencies</span></a>. In this case a direct registration at ECMWF is necessary and the user has to accept a specific license agreement for each dataset he/she intends to retrieve.</dd> +<li><dl class="simple"> +<dt>Local public</dt><dd><p>Scripts are installed and executed on a local machine, either in the current <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directory or in a path given to the installation script. Under this scenario a software environment similar to that at ECMWF is required. Additionally, Web API’s have to be installed to access ECMWF server. The complete installation process is described in <a class="reference internal" href="../../Installation/local.html#ref-local-mode"><span class="std std-ref">Local mode - dependencies</span></a>. In this case a direct registration at ECMWF is necessary and the user has to accept a specific license agreement for each dataset he/she intends to retrieve.</p> +</dd> </dl> </li> </ol> </div></blockquote> <p>An overview is sketched in figure <a class="reference internal" href="#ref-fig-marsaccess"><span class="std std-ref">Application modes</span></a>.</p> -<div class="figure" id="id1"> +<div class="figure align-default" id="id1"> <span id="ref-fig-marsaccess"></span><img alt="../../_images/Diagramm_MarsAccess2.png" src="../../_images/Diagramm_MarsAccess2.png" /> -<p class="caption"><span class="caption-text">Application modes</span></p> +<p class="caption"><span class="caption-text">Application modes</span><a class="headerlink" href="#id1" title="Permalink to this image">¶</a></p> </div> <div class="toctree-wrapper compound"> </div> @@ -245,7 +245,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/Overview/prog_flow.html b/Documentation/html/Documentation/Overview/prog_flow.html index 25894c1cb93b9a615068a31ece17aeedfb661930..95407efb895fd1a7d882e6658bafaf9cb9d7d9ac 100644 --- a/Documentation/html/Documentation/Overview/prog_flow.html +++ b/Documentation/html/Documentation/Overview/prog_flow.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> - <script type="text/javascript" src="../../_static/jquery.js"></script> - <script type="text/javascript" src="../../_static/underscore.js"></script> - <script type="text/javascript" src="../../_static/doctools.js"></script> - <script type="text/javascript" src="../../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../../_static/js/theme.js"></script> @@ -189,26 +189,26 @@ <div class="section" id="general-program-flow"> <h2>General program flow<a class="headerlink" href="#general-program-flow" title="Permalink to this headline">¶</a></h2> <p>The following flow diagram shows the general steps performed by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> -<div class="figure" id="id2"> +<div class="figure align-default" id="id2"> <span id="ref-fig-submit"></span><img alt="../../_images/submit.png" src="../../_images/submit.png" /> -<p class="caption"><span class="caption-text">Overview of the call of python’s <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script and raw sequence of working steps done in <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</span></p> +<p class="caption"><span class="caption-text">Overview of the call of python’s <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script and raw sequence of working steps done in <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</span><a class="headerlink" href="#id2" title="Permalink to this image">¶</a></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> Python program is called by the Shell script <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> or <code class="docutils literal notranslate"><span class="pre">run_local.sh</span></code> and accomplish the following steps:</p> <blockquote> <div><ol class="arabic simple"> -<li><dl class="first docutils"> -<dt>Setup the control data:</dt> -<dd>It gets all command-line and <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file parameters as well as optionally the ECMWF user credentials. Depending the <a class="reference internal" href="app_modes.html"><span class="doc">Application Modes</span></a>, it might also prepare a job script which is then send to the ECMWF queue.</dd> +<li><dl class="simple"> +<dt>Setup the control data:</dt><dd><p>It gets all command-line and <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file parameters as well as optionally the ECMWF user credentials. Depending the <a class="reference internal" href="app_modes.html"><span class="doc">Application Modes</span></a>, it might also prepare a job script which is then send to the ECMWF queue.</p> +</dd> </dl> </li> -<li><dl class="first docutils"> -<dt>Retrieves data from MARS:</dt> -<dd>It creates and sends MARS-requests either on the local machine or on ECMWF server, that receives the data and stores them in a specific format in GRIB files. If the parameter <code class="docutils literal notranslate"><span class="pre">REQUEST</span></code> was set <code class="docutils literal notranslate"><span class="pre">1</span></code> the data are not received but a file <code class="docutils literal notranslate"><span class="pre">mars_requests.csv</span></code> is created with a list of MARS requests and their settings. If it is set to <code class="docutils literal notranslate"><span class="pre">2</span></code> the file is created in addition to retrieving the data. The requests are created in an optimised way by splitting in time, jobs and parameters.</dd> +<li><dl class="simple"> +<dt>Retrieves data from MARS:</dt><dd><p>It creates and sends MARS-requests either on the local machine or on ECMWF server, that receives the data and stores them in a specific format in GRIB files. If the parameter <code class="docutils literal notranslate"><span class="pre">REQUEST</span></code> was set <code class="docutils literal notranslate"><span class="pre">1</span></code> the data are not received but a file <code class="docutils literal notranslate"><span class="pre">mars_requests.csv</span></code> is created with a list of MARS requests and their settings. If it is set to <code class="docutils literal notranslate"><span class="pre">2</span></code> the file is created in addition to retrieving the data. The requests are created in an optimised way by splitting in time, jobs and parameters.</p> +</dd> </dl> </li> -<li><dl class="first docutils"> -<dt>Post-process data to create final <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files:</dt> -<dd>After all data is retrieved, the disaggregation of flux fields (<a class="reference external" href="../disagg.html">see here</a> ) is done as well as the calculation of vertical velocity (<a class="reference external" href="../vertco.html">see here</a>) by the Fortran program <code class="docutils literal notranslate"><span class="pre">COVERT2</span></code>. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>. Since model level fields are typically in <em>GRIB2</em> format whereas surface level fields are still in <em>GRIB1</em> format, they can be converted into GRIB2 if parameter <code class="docutils literal notranslate"><span class="pre">FORMAT</span></code> is set to <em>GRIB2</em>. Please note, however, that older versions of FLEXPART may have difficulties reading pure <em>GRIB2</em> files since some parameter IDs change in <em>GRIB2</em>. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the <code class="docutils literal notranslate"><span class="pre">ECtrans</span></code> utility if the parameter <code class="docutils literal notranslate"><span class="pre">ECTRANS</span></code> is set to <code class="docutils literal notranslate"><span class="pre">1</span></code> and the parameters <code class="docutils literal notranslate"><span class="pre">GATEWAY</span></code>, <code class="docutils literal notranslate"><span class="pre">DESTINATION</span></code> have been set properly during installation. The status of the transfer can be checked with the command <code class="docutils literal notranslate"><span class="pre">ecaccess-ectrans-list</span></code> (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools.</dd> +<li><dl class="simple"> +<dt>Post-process data to create final <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files:</dt><dd><p>After all data is retrieved, the disaggregation of flux fields (<a class="reference external" href="../disagg.html">see here</a> ) is done as well as the calculation of vertical velocity (<a class="reference external" href="../vertco.html">see here</a>) by the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code>. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>. Since model level fields are typically in <em>GRIB2</em> format whereas surface level fields are still in <em>GRIB1</em> format, they can be converted into GRIB2 if parameter <code class="docutils literal notranslate"><span class="pre">FORMAT</span></code> is set to <em>GRIB2</em>. Please note, however, that older versions of FLEXPART may have difficulties reading pure <em>GRIB2</em> files since some parameter IDs change in <em>GRIB2</em>. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the <code class="docutils literal notranslate"><span class="pre">ECtrans</span></code> utility if the parameter <code class="docutils literal notranslate"><span class="pre">ECTRANS</span></code> is set to <code class="docutils literal notranslate"><span class="pre">1</span></code> and the parameters <code class="docutils literal notranslate"><span class="pre">GATEWAY</span></code>, <code class="docutils literal notranslate"><span class="pre">DESTINATION</span></code> have been set properly during installation. The status of the transfer can be checked with the command <code class="docutils literal notranslate"><span class="pre">ecaccess-ectrans-list</span></code> (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools.</p> +</dd> </dl> </li> </ol> @@ -217,34 +217,34 @@ <div class="section" id="workflows-of-different-application-modes"> <h2>Workflows of different application modes<a class="headerlink" href="#workflows-of-different-application-modes" title="Permalink to this headline">¶</a></h2> <p>More details on how different the program flow is for the different <a class="reference internal" href="app_modes.html"><span class="doc">Application Modes</span></a> is sketched in the following diagrams:</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="51%" /> -<col width="49%" /> +<col style="width: 51%" /> +<col style="width: 49%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td><div class="first last figure"> +<tbody> +<tr class="row-odd"><td><div class="figure align-default"> <img alt="../../_images/mode_remote.png" src="../../_images/mode_remote.png" /> </div> </td> -<td><div class="first last figure"> +<td><div class="figure align-default"> <img alt="../../_images/mode_gateway.png" src="../../_images/mode_gateway.png" /> </div> </td> </tr> </tbody> </table> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="51%" /> -<col width="49%" /> +<col style="width: 51%" /> +<col style="width: 49%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td><div class="first last figure"> +<tbody> +<tr class="row-odd"><td><div class="figure align-default"> <img alt="../../_images/mode_local_member.png" src="../../_images/mode_local_member.png" /> </div> </td> -<td><div class="first last figure"> +<td><div class="figure align-default"> <img alt="../../_images/mode_local_public.png" src="../../_images/mode_local_public.png" /> </div> </td> @@ -254,7 +254,7 @@ </div> <div class="section" id="example-application-setting-for-a-local-member-user"> <h2>Example application setting for a local member user<a class="headerlink" href="#example-application-setting-for-a-local-member-user" title="Permalink to this headline">¶</a></h2> -<div class="figure"> +<div class="figure align-default"> <img alt="../../_images/ex_runlocal_en.png" src="../../_images/ex_runlocal_en.png" /> </div> <div class="toctree-wrapper compound"> @@ -282,7 +282,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/api.html b/Documentation/html/Documentation/api.html index e593d05ffb717d0ec217b7f1d60328cc3760d2e9..19ec211c03fec503a464af0edf09deace2fcda83 100644 --- a/Documentation/html/Documentation/api.html +++ b/Documentation/html/Documentation/api.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -205,7 +205,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/disagg.html b/Documentation/html/Documentation/disagg.html index 46e167cac04d5ee028ce3b0f805447fa722b27db..6e98c3f0f03be2a5899509eecbe45268549525b9 100644 --- a/Documentation/html/Documentation/disagg.html +++ b/Documentation/html/Documentation/disagg.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -183,51 +183,51 @@ <div class="section" id="disaggregation-of-flux-data"> <h1>Disaggregation of Flux Data<a class="headerlink" href="#disaggregation-of-flux-data" title="Permalink to this headline">¶</a></h1> <p><code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> interpolates meteorological input data linearly to the position of computational particles in time and space. This method requires point values in the discrete input fields. However, flux data (as listed in table <a class="reference internal" href="#ref-table-fluxpar"><span class="std std-ref">flux fields</span></a>) from the ECMWF represent cell averages or integrals and are accumulated over a specific time interval, depending on the dataset. Hence, to conserve the integral quantity with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>’s linear interpolation a pre-processing scheme has to be applied.</p> -<span id="ref-table-fluxpar"></span><table border="1" class="colwidths-given docutils align-center" id="id1"> +<span id="ref-table-fluxpar"></span><table class="colwidths-given docutils align-center" id="id1"> <caption><span class="caption-text">flux fields</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="14%" /> -<col width="43%" /> -<col width="14%" /> -<col width="29%" /> +<col style="width: 14%" /> +<col style="width: 43%" /> +<col style="width: 14%" /> +<col style="width: 29%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">Short Name</th> -<th class="head">Name</th> -<th class="head">Units</th> -<th class="head">Interpolation Type</th> +<thead> +<tr class="row-odd"><th class="head"><p>Short Name</p></th> +<th class="head"><p>Name</p></th> +<th class="head"><p>Units</p></th> +<th class="head"><p>Interpolation Type</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td>LSP</td> -<td>large-scale precipitation</td> -<td><span class="math notranslate nohighlight">\(m\)</span></td> -<td>modified linear interpolation</td> +<tbody> +<tr class="row-even"><td><p>LSP</p></td> +<td><p>large-scale precipitation</p></td> +<td><p><span class="math notranslate nohighlight">\(m\)</span></p></td> +<td><p>modified linear interpolation</p></td> </tr> -<tr class="row-odd"><td>CP</td> -<td>convective precipitation</td> -<td><span class="math notranslate nohighlight">\(m\)</span></td> -<td>modified linear interpolation</td> +<tr class="row-odd"><td><p>CP</p></td> +<td><p>convective precipitation</p></td> +<td><p><span class="math notranslate nohighlight">\(m\)</span></p></td> +<td><p>modified linear interpolation</p></td> </tr> -<tr class="row-even"><td>SSHF</td> -<td>surface sensible heat flux</td> -<td><span class="math notranslate nohighlight">\(J m^{-2}\)</span></td> -<td>bicubic interpolation</td> +<tr class="row-even"><td><p>SSHF</p></td> +<td><p>surface sensible heat flux</p></td> +<td><p><span class="math notranslate nohighlight">\(J m^{-2}\)</span></p></td> +<td><p>bicubic interpolation</p></td> </tr> -<tr class="row-odd"><td>EWSS</td> -<td>eastward turbulent surface stress</td> -<td><span class="math notranslate nohighlight">\(N m^{-2} s\)</span></td> -<td>bicubic interpolation</td> +<tr class="row-odd"><td><p>EWSS</p></td> +<td><p>eastward turbulent surface stress</p></td> +<td><p><span class="math notranslate nohighlight">\(N m^{-2} s\)</span></p></td> +<td><p>bicubic interpolation</p></td> </tr> -<tr class="row-even"><td>NSSS</td> -<td>northward turbulent surface stress</td> -<td><span class="math notranslate nohighlight">\(N m^{-2} s\)</span></td> -<td>bicubic interpolation</td> +<tr class="row-even"><td><p>NSSS</p></td> +<td><p>northward turbulent surface stress</p></td> +<td><p><span class="math notranslate nohighlight">\(N m^{-2} s\)</span></p></td> +<td><p>bicubic interpolation</p></td> </tr> -<tr class="row-odd"><td>SSR</td> -<td>surface net solar radiation</td> -<td><span class="math notranslate nohighlight">\(J m^{-2}\)</span></td> -<td>bicubic interpolation</td> +<tr class="row-odd"><td><p>SSR</p></td> +<td><p>surface net solar radiation</p></td> +<td><p><span class="math notranslate nohighlight">\(J m^{-2}\)</span></p></td> +<td><p>bicubic interpolation</p></td> </tr> </tbody> </table> @@ -236,8 +236,8 @@ Afterwards, a <em>disaggregation</em> scheme is applied which means to break dow In order to be able to carry out the disaggregation procedure proposed by Paul James, additional flux data is retrieved automatically for one day at the beginning and one day at the end of the period specified. Thus, data for flux computation will be requested for the period START_DATE-1 to END_DATE+1. Note that these (additional) dates are used only for interpolation within <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> and are not communicated to the final <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files.</p> <p>The flux disaggregation produces files named <code class="docutils literal notranslate"><span class="pre">fluxYYYYMMDDHH</span></code>, where <code class="docutils literal notranslate"><span class="pre">YYYYMMDDHH</span></code> is the date format. Note, that the first two and last two flux files do not contain any data.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Note also that for operational retrievals (<code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> set to 00 or 12) forecast fluxes are only available until <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code>, so that no polynomial interpolation is possible in the last two time intervals. This is the reason why setting <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> is not recommended for on demand scripts.</p> +<p class="admonition-title">Note</p> +<p>Note also that for operational retrievals (<code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> set to 00 or 12) forecast fluxes are only available until <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code>, so that no polynomial interpolation is possible in the last two time intervals. This is the reason why setting <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> is not recommended for on demand scripts.</p> </div> <div class="section" id="disaggregation-for-precipitation-in-older-versions"> <h2>Disaggregation for precipitation in older versions<a class="headerlink" href="#disaggregation-for-precipitation-in-older-versions" title="Permalink to this headline">¶</a></h2> @@ -251,9 +251,9 @@ This is obviously undesirable as it will affect wet scavenging, a very efficient Wet deposition may be produced in grid cells where none should occur, or too little may be produced in others. This could lead to an unrealistic, checkerboard-like deposition fields. Horizontally, the precipitation values are averages for a grid cell around the grid point to which they are ascribed, and <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> uses bilinear interpolation to obtain precipitation rates at particle positions. However, the supporting points in space are not shifted between precipitation and other variables as is the case for the temporal dimension.</p> -<div class="align-center figure" id="id2"> +<div class="align-center figure align-default" id="id2"> <span id="ref-fig-olddisagg"></span><img alt="../_images/old_disagg.png" src="../_images/old_disagg.png" /> -<p class="caption"><span class="caption-text">Fig. 1: Example of disaggregation scheme as implemented in older versions for an isolated precipitation event lasting one time interval (thick blue line). The amount of original precipitation after de-accumulation is given by the blue-shaded area. The green circles represent the discrete grid points after disaggregation and linearly interpolate in between them as indicated by the green line and the green-shaded area. Note that supporting points for the interpolation are shifted by a half-time interval compared to the times when other meteorological fields are available (Hittmeir et al. 2018).</span></p> +<p class="caption"><span class="caption-text">Fig. 1: Example of disaggregation scheme as implemented in older versions for an isolated precipitation event lasting one time interval (thick blue line). The amount of original precipitation after de-accumulation is given by the blue-shaded area. The green circles represent the discrete grid points after disaggregation and linearly interpolate in between them as indicated by the green line and the green-shaded area. Note that supporting points for the interpolation are shifted by a half-time interval compared to the times when other meteorological fields are available (Hittmeir et al. 2018).</span><a class="headerlink" href="#id2" title="Permalink to this image">¶</a></p> </div> <p>Disaggregation is done for 4 adjacent timespans (<span class="math notranslate nohighlight">\(a_0, a_1, a_2, a_3\)</span>) which generates a new, disaggregated value which is output at the central point of the 4 adjacent timespans.</p> <div class="math notranslate nohighlight"> @@ -275,14 +275,14 @@ These requirements on the reconstruction algorithm imply that time intervals wit In the simplest scenario of an isolated precipitation event, where in the time interval before and after the data values are zero, the reconstruction algorithm therefore has to vanish at the boundaries of the interval, too. The additional conditions of continuity and conservation of the precipitation amount then require us to introduce sub-grid points if we want to keep a linear interpolation (Fig. 2). The height is thereby determined by the condition of conservation of the integral of the function over the time interval.</p> -<div class="align-center figure" id="id3"> +<div class="align-center figure align-default" id="id3"> <span id="ref-fig-newdisagg"></span><img alt="../_images/new_disagg.png" src="../_images/new_disagg.png" /> -<p class="caption"><span class="caption-text">Fig. 2: Precipitation rate linearly interpolated using a sub-grid with two additional points. Colours as in Fig. 1 (Hittmeir et al. 2018).</span></p> +<p class="caption"><span class="caption-text">Fig. 2: Precipitation rate linearly interpolated using a sub-grid with two additional points. Colours as in Fig. 1 (Hittmeir et al. 2018).</span><a class="headerlink" href="#id3" title="Permalink to this image">¶</a></p> </div> <p>Figure 3 shows an overview of the new algorithm and its components.</p> -<div class="align-center figure" id="id4"> +<div class="align-center figure align-default" id="id4"> <span id="ref-fig-ia3"></span><img alt="../_images/IA3.png" src="../_images/IA3.png" /> -<p class="caption"><span class="caption-text">Fig. 3: Schematic overview of the basic notation in a precipitation interval with the original precipitation rate g (green) as a step function and the interpolated data <span class="math notranslate nohighlight">\(f\)</span> (dark blue) as the piecewise linear function. The original time interval with fixed grid length <span class="math notranslate nohighlight">\(\delta t\)</span> is split equidistantly in three subintervals denoted by <span class="math notranslate nohighlight">\(I_i^{1,2,3}\)</span>, with the slopes in the subintervals as denoted by <span class="math notranslate nohighlight">\(k_i^{1,2,3}\)</span> . The sub-grid function values <span class="math notranslate nohighlight">\(f_i, f_i^{1,2}, f_{i+1}\)</span> are marked by red diamonds (Hittmeir et al. 2018).</span></p> +<p class="caption"><span class="caption-text">Fig. 3: Schematic overview of the basic notation in a precipitation interval with the original precipitation rate g (green) as a step function and the interpolated data <span class="math notranslate nohighlight">\(f\)</span> (dark blue) as the piecewise linear function. The original time interval with fixed grid length <span class="math notranslate nohighlight">\(\delta t\)</span> is split equidistantly in three subintervals denoted by <span class="math notranslate nohighlight">\(I_i^{1,2,3}\)</span>, with the slopes in the subintervals as denoted by <span class="math notranslate nohighlight">\(k_i^{1,2,3}\)</span> . The sub-grid function values <span class="math notranslate nohighlight">\(f_i, f_i^{1,2}, f_{i+1}\)</span> are marked by red diamonds (Hittmeir et al. 2018).</span><a class="headerlink" href="#id4" title="Permalink to this image">¶</a></p> </div> <p>The following lists the equations of the new algorithm.</p> <div class="math notranslate nohighlight"> @@ -297,9 +297,9 @@ The height is thereby determined by the condition of conservation of the integra \[ \begin{align}\begin{aligned}f_{i+1}^\diamond=&\frac{18}{13}g_i-\frac{5}{13}f_i\\f_{i+1}^{\diamond\diamond}=&\frac{18}{13}g_{i+1}-\frac{5}{13}f_{i+2}\\f_{i+1} =& \min\left\{3 g_i,\, 3 g_{i+1},\, \sqrt{(f_{i+1}^\diamond\,f_{i+1}^{\diamond\diamond})_+}\right\}\\f_i^{(1)}=& \frac32 g_i -\frac{1}{12}f_{i}-\frac{5}{12}f_{i+1}^{\textrm{mon}}\\f_i^{(2)}=& \frac32 g_i -\frac{5}{12}f_{i}-\frac{1}{12}f_{i+1}^{\textrm{mon}}\\\textbf{endif}\end{aligned}\end{align} \]</div> <p>In the case of the new disaggregation method for precipitation, the two new sub grid points are added in the <code class="docutils literal notranslate"><span class="pre">flux</span></code> output files. They are identified by the forecast step parameter <code class="docutils literal notranslate"><span class="pre">step</span></code> which is 0 for the original time interval and 1 or 2 for the two new sub grid points respectively. The filenames do not change.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> +<p class="admonition-title">Note</p> <p>The new method for disaggregation was published in the Geoscientific Model Development Journal in 2018:</p> -<p class="last">Hittmeir, S., Philipp, A., and Seibert, P.: A conservative reconstruction scheme for the interpolation of extensive quantities in the Lagrangian particle dispersion model FLEXPART, Geosci. Model Dev., 11, 2503-2523, <a class="reference external" href="https://doi.org/10.5194/gmd-11-2503-2018">https://doi.org/10.5194/gmd-11-2503-2018</a>, 2018.</p> +<p>Hittmeir, S., Philipp, A., and Seibert, P.: A conservative reconstruction scheme for the interpolation of extensive quantities in the Lagrangian particle dispersion model FLEXPART, Geosci. Model Dev., 11, 2503-2523, <a class="reference external" href="https://doi.org/10.5194/gmd-11-2503-2018">https://doi.org/10.5194/gmd-11-2503-2018</a>, 2018.</p> </div> </div> <div class="section" id="disaggregation-for-the-rest-of-the-flux-fields"> @@ -340,7 +340,7 @@ p_d &= a_0 - p_a / 4. - p_b / 3. - p_c / 2.\end{split}\]</div> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/input.html b/Documentation/html/Documentation/input.html index 1c689c2c90464fb64b67a4c349ff9c0b213a3c2f..7eb1b866cdece52ff0090ac56d958a0fa4024793 100644 --- a/Documentation/html/Documentation/input.html +++ b/Documentation/html/Documentation/input.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -97,7 +97,7 @@ <li class="toctree-l2 current"><a class="current reference internal" href="#">Control & Input Data</a><ul> <li class="toctree-l3"><a class="reference internal" href="Input/setup.html">The Installation Script - <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="Input/compilejob.html">The Compilation Jobscript <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code></a></li> -<li class="toctree-l3"><a class="reference internal" href="Input/fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="Input/fortran_makefile.html">The Fortran Makefile - <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="Input/run.html">The executable Script - <code class="docutils literal notranslate"><span class="pre">run.sh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="Input/jobscript.html">The Jobscript <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="Input/control.html">The CONTROL file</a></li> @@ -188,58 +188,51 @@ <div class="section" id="control-input-data"> <h1>Control & Input Data<a class="headerlink" href="#control-input-data" title="Permalink to this headline">¶</a></h1> -<dl class="docutils"> -<dt>Input Data</dt> -<dd><ul class="first last"> -<li><dl class="first docutils"> -<dt><a class="reference internal" href="Input/control.html"><span class="doc">The CONTROL file</span></a></dt> -<dd><p class="first"><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> needs a number of controlling parameters to decide on the behaviour and the actual dataset to be retrieved. They are initialized by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with their default values and can be overwritten with definitions set in the so called <a class="reference internal" href="Input/control.html"><span class="doc">The CONTROL file</span></a>.</p> +<dl> +<dt>Input Data</dt><dd><ul> +<li><dl> +<dt><a class="reference internal" href="Input/control.html"><span class="doc">The CONTROL file</span></a></dt><dd><p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> needs a number of controlling parameters to decide on the behaviour and the actual dataset to be retrieved. They are initialized by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> with their default values and can be overwritten with definitions set in the so called <a class="reference internal" href="Input/control.html"><span class="doc">The CONTROL file</span></a>.</p> <p>To be able to successfully retrieve data from the ECMWF Mars archive it is necessary to understand these parameters and set them to proper and consistent values. They are described in <a class="reference internal" href="Input/control_params.html"><span class="doc">The CONTROL parameters</span></a> section.</p> -<p class="last">We also have some <a class="reference internal" href="Input/examples.html"><span class="doc">CONTROL file examples</span></a> and description of <a class="reference internal" href="Input/changes.html"><span class="doc">CONTROL file changes</span></a> changes to previous versions and downward compatibilities.</p> +<p>We also have some <a class="reference internal" href="Input/examples.html"><span class="doc">CONTROL file examples</span></a> and description of <a class="reference internal" href="Input/changes.html"><span class="doc">CONTROL file changes</span></a> changes to previous versions and downward compatibilities.</p> </dd> </dl> </li> -<li><dl class="first docutils"> -<dt><a class="reference internal" href="Input/ecmwf_env.html"><span class="doc">ECMWF User Credential file ECMWF_ENV</span></a></dt> -<dd><p class="first last">For <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> it is necessary to be able to reach ECMWF servers in the <strong>remote mode</strong> and the <strong>gateway mode</strong>. Therefore a <a class="reference internal" href="Input/ecmwf_env.html"><span class="doc">ECMWF User Credential file ECMWF_ENV</span></a> is created during the installation process.</p> +<li><dl class="simple"> +<dt><a class="reference internal" href="Input/ecmwf_env.html"><span class="doc">ECMWF User Credential file ECMWF_ENV</span></a></dt><dd><p>For <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> it is necessary to be able to reach ECMWF servers in the <strong>remote mode</strong> and the <strong>gateway mode</strong>. Therefore a <a class="reference internal" href="Input/ecmwf_env.html"><span class="doc">ECMWF User Credential file ECMWF_ENV</span></a> is created during the installation process.</p> </dd> </dl> </li> -<li><dl class="first docutils"> -<dt><a class="reference internal" href="Input/templates.html"><span class="doc">Templates</span></a></dt> -<dd><p class="first last">A number of files which are created by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are taken from templates. This makes it easy to adapt for example the jobscripts regarding its settings for the batch jobs.</p> +<li><dl class="simple"> +<dt><a class="reference internal" href="Input/templates.html"><span class="doc">Templates</span></a></dt><dd><p>A number of files which are created by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are taken from templates. This makes it easy to adapt for example the jobscripts regarding its settings for the batch jobs.</p> </dd> </dl> </li> </ul> </dd> </dl> -<dl class="docutils" id="ref-controlling"> -<dt>Controlling</dt> -<dd><p class="first">The main tasks and behaviour of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are controlled by its Python scripts. There are two top-level scripts, one for installation called <a class="reference external" href="Input/setup.html#ref-install-script">install</a> and one for execution called <a class="reference external" href="Input/submit.html#ref-submit-script">submit</a>. +<dl id="ref-controlling"> +<dt>Controlling</dt><dd><p>The main tasks and behaviour of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are controlled by its Python scripts. There are two top-level scripts, one for installation called <a class="reference external" href="Input/setup.html#ref-install-script">install</a> and one for execution called <a class="reference external" href="Input/submit.html#ref-submit-script">submit</a>. They can interpret a number of command line arguments which can be seen by typing <code class="docutils literal notranslate"><span class="pre">--help</span></code> after the script call. Go to the root directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> to type:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> flex_extract_vX.X -python3 source/python/install.py --help -python3 source/python/submit.py --help +python3 Source/Python/install.py --help +python3 Source/Python/submit.py --help </pre></div> </div> <p>In this new version we provide also the wrapping Shell scripts <a class="reference external" href="Input/setup.html">setup</a> and <a class="reference external" href="Input/run.html">run</a>, which sets the command line parameters, do some checks and execute the corresponing Python scripts <code class="docutils literal notranslate"><span class="pre">install.py</span></code> and <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> respectivley.</p> <p>It might be faster and easier for beginners. See <a class="reference internal" href="../quick_start.html"><span class="doc">Quick Start</span></a> for information on how to use them.</p> <p>Additionally, <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> creates the Korn Shell scripts <a class="reference internal" href="Input/compilejob.html"><span class="doc">The Compilation Jobscript compilejob.ksh</span></a> and <a class="reference internal" href="Input/jobscript.html"><span class="doc">The Jobscript job.ksh</span></a> which will be send to the ECMWF serves in the <strong>remote mode</strong> and the <strong>gateway mode</strong> for starting batch jobs.</p> -<p>The Fortran program will be compiled during the installation process by the <a class="reference internal" href="Input/fortran_makefile.html"><span class="doc">The Fortran Makefile - CONVERT2</span></a>.</p> +<p>The Fortran program will be compiled during the installation process by the <a class="reference internal" href="Input/fortran_makefile.html"><span class="doc">The Fortran Makefile - calc_etadot</span></a>.</p> <p>To sum up, the following scripts controls <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>:</p> -<dl class="last docutils"> -<dt>Installation</dt> -<dd><ul class="first last simple"> -<li><a class="reference internal" href="Input/setup.html"><span class="doc">The Installation Script - setup.sh</span></a></li> -<li><a class="reference internal" href="Input/compilejob.html"><span class="doc">The Compilation Jobscript compilejob.ksh</span></a></li> -<li><a class="reference internal" href="Input/fortran_makefile.html"><span class="doc">The Fortran Makefile - CONVERT2</span></a></li> +<dl class="simple"> +<dt>Installation</dt><dd><ul class="simple"> +<li><p><a class="reference internal" href="Input/setup.html"><span class="doc">The Installation Script - setup.sh</span></a></p></li> +<li><p><a class="reference internal" href="Input/compilejob.html"><span class="doc">The Compilation Jobscript compilejob.ksh</span></a></p></li> +<li><p><a class="reference internal" href="Input/fortran_makefile.html"><span class="doc">The Fortran Makefile - calc_etadot</span></a></p></li> </ul> </dd> -<dt>Execution</dt> -<dd><ul class="first last simple"> -<li><a class="reference internal" href="Input/run.html"><span class="doc">The executable Script - run.sh</span></a></li> -<li><a class="reference internal" href="Input/jobscript.html"><span class="doc">The Jobscript job.ksh</span></a></li> +<dt>Execution</dt><dd><ul class="simple"> +<li><p><a class="reference internal" href="Input/run.html"><span class="doc">The executable Script - run.sh</span></a></p></li> +<li><p><a class="reference internal" href="Input/jobscript.html"><span class="doc">The Jobscript job.ksh</span></a></p></li> </ul> </dd> </dl> @@ -269,7 +262,7 @@ python3 source/python/submit.py --help <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/output.html b/Documentation/html/Documentation/output.html index 4920cc442ddfae3b31fa534cbe5ee0c4374246ab..a314c95b836ea3110ec0403eb928929b3849a7a5 100644 --- a/Documentation/html/Documentation/output.html +++ b/Documentation/html/Documentation/output.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -194,29 +194,29 @@ <div class="section" id="output-data"> <h1>Output Data<a class="headerlink" href="#output-data" title="Permalink to this headline">¶</a></h1> <p>The output data of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> are separated mainly into temporary files and the final <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files:</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="51%" /> -<col width="49%" /> +<col style="width: 51%" /> +<col style="width: 49%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td><code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files</td> -<td>Temporary files (saved in debug mode)</td> +<tbody> +<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> input files</p></td> +<td><p>Temporary files (saved in debug mode)</p></td> </tr> -<tr class="row-even"><td><ul class="first last simple"> -<li>Standard output filenames</li> -<li>Output for pure forecast</li> -<li>Output for ensemble members</li> -<li>Output for new precip. disaggregation</li> +<tr class="row-even"><td><ul class="simple"> +<li><p>Standard output filenames</p></li> +<li><p>Output for pure forecast</p></li> +<li><p>Output for ensemble members</p></li> +<li><p>Output for new precip. disaggregation</p></li> </ul> </td> -<td><ul class="first last simple"> -<li>MARS request file (opt)</li> -<li>flux files</li> -<li>VERTICAL.EC</li> -<li>index file</li> -<li>fort files</li> -<li>MARS grib files</li> +<td><ul class="simple"> +<li><p>MARS request file (opt)</p></li> +<li><p>flux files</p></li> +<li><p>VERTICAL.EC</p></li> +<li><p>index file</p></li> +<li><p>fort files</p></li> +<li><p>MARS grib files</p></li> </ul> </td> </tr> @@ -294,7 +294,7 @@ edition centre date dataType gridType stepRange ty </div> <div class="section" id="additional-fields-with-new-precipitation-disaggregation"> <h3>Additional fields with new precipitation disaggregation<a class="headerlink" href="#additional-fields-with-new-precipitation-disaggregation" title="Permalink to this headline">¶</a></h3> -<p>The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see <a class="reference internal" href="disagg.html"><span class="doc">Disaggregation of Flux Data</span></a> ??????????????????. +<p>The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see <a class="reference internal" href="disagg.html"><span class="doc">Disaggregation of Flux Data</span></a>. The two additional fields are marked with the <code class="docutils literal notranslate"><span class="pre">step</span></code> parameter in the Grib messages and are set to “1” and “2” for sub-grid point 1 and 2 respectively. The output filenames do not change in this case. Below is an example list of precipitation fields in an output file generated with the new disaggregation method:</p> @@ -313,7 +313,7 @@ edition centre date dataType gridType stepRange ty </div> <div class="section" id="temporary-files"> <h2>Temporary files<a class="headerlink" href="#temporary-files" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the <code class="docutils literal notranslate"><span class="pre">DEBUG</span></code> mode is switched on (see <a class="reference internal" href="Input/control_params.html"><span class="doc">The CONTROL parameters</span></a>.</p> +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the <code class="docutils literal notranslate"><span class="pre">DEBUG</span></code> mode is switched on (see <a class="reference internal" href="Input/control_params.html"><span class="doc">The CONTROL parameters</span></a>).</p> <div class="section" id="mars-grib-files"> <h3>MARS grib files<a class="headerlink" href="#mars-grib-files" title="Permalink to this headline">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> retrieves all meteorological fields from MARS and stores them in files ending with <code class="docutils literal notranslate"><span class="pre">.grb</span></code>. @@ -324,19 +324,19 @@ Since the request times and data transfer of MARS access are limited and ECMWF a </div> </div></blockquote> <p>Description:</p> -<dl class="docutils"> -<dt>Field type:</dt> -<dd><code class="docutils literal notranslate"><span class="pre">AN</span></code> - Analysis, <code class="docutils literal notranslate"><span class="pre">FC</span></code> - Forecast, <code class="docutils literal notranslate"><span class="pre">4V</span></code> - 4d variational analysis, <code class="docutils literal notranslate"><span class="pre">CV</span></code> - Validation forecast, <code class="docutils literal notranslate"><span class="pre">CF</span></code> - Control forecast, <code class="docutils literal notranslate"><span class="pre">PF</span></code> - Perturbed forecast</dd> -<dt>Grid type:</dt> -<dd><code class="docutils literal notranslate"><span class="pre">SH</span></code> - Spherical Harmonics, <code class="docutils literal notranslate"><span class="pre">GG</span></code> - Gaussian Grid, <code class="docutils literal notranslate"><span class="pre">OG</span></code> - Output Grid (typically lat/lon), <code class="docutils literal notranslate"><span class="pre">_OROLSM</span></code> - Orography parameter</dd> -<dt>Temporal property:</dt> -<dd><code class="docutils literal notranslate"><span class="pre">__</span></code> - instantaneous fields, <code class="docutils literal notranslate"><span class="pre">_acc</span></code> - accumulated fields</dd> -<dt>Level type:</dt> -<dd><code class="docutils literal notranslate"><span class="pre">ML</span></code> - Model Level, <code class="docutils literal notranslate"><span class="pre">SL</span></code> - Surface Level</dd> -<dt>ppid:</dt> -<dd>The process number of the parent process of submitted script.</dd> -<dt>pid:</dt> -<dd>The process number of the submitted script.</dd> +<dl class="simple"> +<dt>Field type:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">AN</span></code> - Analysis, <code class="docutils literal notranslate"><span class="pre">FC</span></code> - Forecast, <code class="docutils literal notranslate"><span class="pre">4V</span></code> - 4d variational analysis, <code class="docutils literal notranslate"><span class="pre">CV</span></code> - Validation forecast, <code class="docutils literal notranslate"><span class="pre">CF</span></code> - Control forecast, <code class="docutils literal notranslate"><span class="pre">PF</span></code> - Perturbed forecast</p> +</dd> +<dt>Grid type:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">SH</span></code> - Spherical Harmonics, <code class="docutils literal notranslate"><span class="pre">GG</span></code> - Gaussian Grid, <code class="docutils literal notranslate"><span class="pre">OG</span></code> - Output Grid (typically lat/lon), <code class="docutils literal notranslate"><span class="pre">_OROLSM</span></code> - Orography parameter</p> +</dd> +<dt>Temporal property:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">__</span></code> - instantaneous fields, <code class="docutils literal notranslate"><span class="pre">_acc</span></code> - accumulated fields</p> +</dd> +<dt>Level type:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">ML</span></code> - Model Level, <code class="docutils literal notranslate"><span class="pre">SL</span></code> - Surface Level</p> +</dd> +<dt>ppid:</dt><dd><p>The process number of the parent process of submitted script.</p> +</dd> +<dt>pid:</dt><dd><p>The process number of the submitted script.</p> +</dd> </dl> <p>The process ids should avoid mixing of fields if several <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> jobs are performed in parallel (which is, however, not recommended). The date format is YYYYMMDDHH.</p> <p>Example <code class="docutils literal notranslate"><span class="pre">.grb</span></code> files for a day of CERA-20C data:</p> @@ -381,88 +381,88 @@ request_number, accuracy, area, dataset, date, expver, gaussian, grid, levelist, </div> <p>The date format is YYYYMMDDHH. The optional block <code class="docutils literal notranslate"><span class="pre">[.N<xxx>]</span></code> marks the ensemble forecast number, where <code class="docutils literal notranslate"><span class="pre"><xxx></span></code> is the ensemble member number. The optional block <code class="docutils literal notranslate"><span class="pre">[.<xxx>]</span></code> marks a pure forecast with <code class="docutils literal notranslate"><span class="pre"><xxx></span></code> being the forecast step.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">In the case of the new dis-aggregation method for precipitation, two new sub-intervals are added in between each time interval. They are identified by the forecast step parameter which is <code class="docutils literal notranslate"><span class="pre">0</span></code> for the original time interval and <code class="docutils literal notranslate"><span class="pre">1</span></code> or <code class="docutils literal notranslate"><span class="pre">2</span></code> for the two new intervals respectively.</p> +<p class="admonition-title">Note</p> +<p>In the case of the new dis-aggregation method for precipitation, two new sub-intervals are added in between each time interval. They are identified by the forecast step parameter which is <code class="docutils literal notranslate"><span class="pre">0</span></code> for the original time interval and <code class="docutils literal notranslate"><span class="pre">1</span></code> or <code class="docutils literal notranslate"><span class="pre">2</span></code> for the two new intervals respectively.</p> </div> </div> <div class="section" id="fort-files"> <h3>fort files<a class="headerlink" href="#fort-files" title="Permalink to this headline">¶</a></h3> -<p>There are a number of input files for the <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> Fortran program named</p> +<p>There are a number of input files for the <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> Fortran program named</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>fort.xx </pre></div> </div> <p>where <code class="docutils literal notranslate"><span class="pre">xx</span></code> is the number which defines the meteorological fields stored in these files. They are generated by the Python part of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> by just splitting the meteorological fields for a unique time stamp from the <code class="docutils literal notranslate"><span class="pre">*.grb</span></code> files into the <code class="docutils literal notranslate"><span class="pre">fort</span></code> files. The following table defines the numbers with their corresponding content.</p> -<table border="1" class="colwidths-given docutils" id="id1"> +<table class="colwidths-given docutils align-default" id="id1"> <caption><span class="caption-text">Content of fort - files</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="20%" /> -<col width="80%" /> +<col style="width: 20%" /> +<col style="width: 80%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">Number</th> -<th class="head">Content</th> +<thead> +<tr class="row-odd"><th class="head"><p>Number</p></th> +<th class="head"><p>Content</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td>10</td> -<td>U and V wind components</td> +<tbody> +<tr class="row-even"><td><p>10</p></td> +<td><p>U and V wind components</p></td> </tr> -<tr class="row-odd"><td>11</td> -<td>temperature</td> +<tr class="row-odd"><td><p>11</p></td> +<td><p>temperature</p></td> </tr> -<tr class="row-even"><td>12</td> -<td>logarithm of surface pressure</td> +<tr class="row-even"><td><p>12</p></td> +<td><p>logarithm of surface pressure</p></td> </tr> -<tr class="row-odd"><td>13</td> -<td>divergence (optional)</td> +<tr class="row-odd"><td><p>13</p></td> +<td><p>divergence (optional)</p></td> </tr> -<tr class="row-even"><td>16</td> -<td>surface fields</td> +<tr class="row-even"><td><p>16</p></td> +<td><p>surface fields</p></td> </tr> -<tr class="row-odd"><td>17</td> -<td>specific humidity</td> +<tr class="row-odd"><td><p>17</p></td> +<td><p>specific humidity</p></td> </tr> -<tr class="row-even"><td>18</td> -<td>surface specific humidity (reduced gaussian)</td> +<tr class="row-even"><td><p>18</p></td> +<td><p>surface specific humidity (reduced gaussian)</p></td> </tr> -<tr class="row-odd"><td>19</td> -<td>vertical velocity (pressure) (optional)</td> +<tr class="row-odd"><td><p>19</p></td> +<td><p>vertical velocity (pressure) (optional)</p></td> </tr> -<tr class="row-even"><td>21</td> -<td>eta-coordinate vertical velocity (optional)</td> +<tr class="row-even"><td><p>21</p></td> +<td><p>eta-coordinate vertical velocity (optional)</p></td> </tr> -<tr class="row-odd"><td>22</td> -<td>total cloud water content (optional)</td> +<tr class="row-odd"><td><p>22</p></td> +<td><p>total cloud water content (optional)</p></td> </tr> </tbody> </table> -<p>Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span> <span class="pre">v10</span></code> and newer. Please see section ????????? for more information.</p> -<p>The <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> program saves its results in file <code class="docutils literal notranslate"><span class="pre">fort.15</span></code> which typically contains:</p> -<table border="1" class="colwidths-given docutils" id="id2"> -<caption><span class="caption-text">Output file of the Fortran program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code></span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption> +<p>Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span> <span class="pre">v10</span></code> and newer.</p> +<p>The <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> program saves its results in file <code class="docutils literal notranslate"><span class="pre">fort.15</span></code> which typically contains:</p> +<table class="colwidths-given docutils align-default" id="id2"> +<caption><span class="caption-text">Output file of the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></span><a class="headerlink" href="#id2" title="Permalink to this table">¶</a></caption> <colgroup> -<col width="20%" /> -<col width="80%" /> +<col style="width: 20%" /> +<col style="width: 80%" /> </colgroup> -<thead valign="bottom"> -<tr class="row-odd"><th class="head">Number</th> -<th class="head">Content</th> +<thead> +<tr class="row-odd"><th class="head"><p>Number</p></th> +<th class="head"><p>Content</p></th> </tr> </thead> -<tbody valign="top"> -<tr class="row-even"><td>15</td> -<td>U and V wind components, eta-coordinate vertical velocity, temperature, surface pressure, specific humidity</td> +<tbody> +<tr class="row-even"><td><p>15</p></td> +<td><p>U and V wind components, eta-coordinate vertical velocity, temperature, surface pressure, specific humidity</p></td> </tr> </tbody> </table> -<p>More details about the content of <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> can be found in <a class="reference internal" href="vertco.html"><span class="doc">Vertical Coordinate</span></a>.</p> +<p>More details about the content of <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> can be found in <a class="reference internal" href="vertco.html"><span class="doc">Vertical Coordinate</span></a>.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p>The <code class="docutils literal notranslate"><span class="pre">fort.4</span></code> file is the namelist file to drive the Fortran program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code>. It is therefore also an input file and is described in ???????????????</p> +<p class="admonition-title">Note</p> +<p>The <code class="docutils literal notranslate"><span class="pre">fort.4</span></code> file is the namelist file to drive the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code>. It is therefore also an input file.</p> <p>Example of a namelist:</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="p">&</span>NAMGEN +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="p">&</span>NAMGEN <span class="nv">maxl</span> <span class="o">=</span> <span class="m">11</span>, <span class="nv">maxb</span> <span class="o">=</span> <span class="m">11</span>, <span class="nv">mlevel</span> <span class="o">=</span> <span class="m">91</span>, @@ -510,7 +510,7 @@ The following table defines the numbers with their corresponding content.</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/overview.html b/Documentation/html/Documentation/overview.html index 24d7d278dc3f7cbacee3d6c0fbd5bfa8ba83b56f..89c60de4bf677eb06516816a3a16cfbc9f1d1dbf 100644 --- a/Documentation/html/Documentation/overview.html +++ b/Documentation/html/Documentation/overview.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -182,11 +182,10 @@ <p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is an open-source software to retrieve meteorological fields from the European Centre for Medium-Range Weather Forecasts (ECMWF) Mars archive to serve as input files for the <code class="docutils literal notranslate"><span class="pre">FLEXTRA</span></code>/<code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> Atmospheric Transport Modelling system. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> was created explicitly for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> users who wants to use meteorological data from ECMWF to drive the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> model. The software retrieves the minimal number of parameters <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> needs to work and provides the data in the explicity format <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> understands.</p> -<dl class="docutils"> -<dt><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> consists of 2 main parts:</dt> -<dd><ol class="first last arabic simple"> -<li>a Python part, where the reading of parameter settings, retrieving data from MARS and preparing the data for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> is done and</li> -<li>a Fortran part, where the calculation of the vertical velocity is done and if necessary the conversion from spectral to regular latitude/longitude grids.</li> +<dl class="simple"> +<dt><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> consists of 2 main parts:</dt><dd><ol class="arabic simple"> +<li><p>a Python part, where the reading of parameter settings, retrieving data from MARS and preparing the data for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> is done and</p></li> +<li><p>a Fortran part, where the calculation of the vertical velocity is done and if necessary the conversion from spectral to regular latitude/longitude grids.</p></li> </ol> </dd> </dl> @@ -218,7 +217,7 @@ The software retrieves the minimal number of parameters <code class="docutils li <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Documentation/vertco.html b/Documentation/html/Documentation/vertco.html index e3accb78f8615f70b9038c425f996fe3ea4ea4ba..51dae94c4a4aed69a66fb381d0f405f6aa634db1 100644 --- a/Documentation/html/Documentation/vertco.html +++ b/Documentation/html/Documentation/vertco.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -184,11 +184,10 @@ <h1>Vertical Coordinate<a class="headerlink" href="#vertical-coordinate" title="Permalink to this headline">¶</a></h1> <div class="section" id="calculation-of-vertical-velocity-and-preparation-of-output-files"> <h2>Calculation of vertical velocity and preparation of Output-files<a class="headerlink" href="#calculation-of-vertical-velocity-and-preparation-of-output-files" title="Permalink to this headline">¶</a></h2> -<dl class="docutils"> -<dt><code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> has two ways to calculate the vertical velocity for <code class="docutils literal notranslate"><span class="pre">FLEXTRA</span></code>/<code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>:</dt> -<dd><ol class="first last lowerroman simple"> -<li>from the horizontal wind field,</li> -<li>from the MARS parameter 77, which is available for operational forecasts and analyses since September 2008 and for reanalysis datasets <strong>ERA5</strong> and <strong>CERA-20C</strong>.</li> +<dl class="simple"> +<dt><code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> has two ways to calculate the vertical velocity for <code class="docutils literal notranslate"><span class="pre">FLEXTRA</span></code>/<code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>:</dt><dd><ol class="lowerroman simple"> +<li><p>from the horizontal wind field,</p></li> +<li><p>from the MARS parameter 77, which is available for operational forecasts and analyses since September 2008 and for reanalysis datasets <strong>ERA5</strong> and <strong>CERA-20C</strong>.</p></li> </ol> </dd> </dl> @@ -202,41 +201,40 @@ give a vertical velocity in Pa/s as needed by <code class="docutils literal notr </div> <div class="section" id="calculation-of-vertical-velocity-from-horizontal-wind-using-the-continuity-equation"> <h2>Calculation of vertical velocity from horizontal wind using the continuity equation<a class="headerlink" href="#calculation-of-vertical-velocity-from-horizontal-wind-using-the-continuity-equation" title="Permalink to this headline">¶</a></h2> -<p>The vertical velocity is computed by the FORTRAN90 program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> in the ECMWF -vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> can be found in the +<p>The vertical velocity is computed by the FORTRAN90 program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> in the ECMWF +vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> can be found in the documents v20_update_protocol.pdf, V30_update_protocol.pdf and -V40_update_protocol.pdf. The computational demand and accuracy of <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> is highly +V40_update_protocol.pdf. The computational demand and accuracy of <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> is highly dependent on the specification of parameters <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> and <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code>. The following guidance can be given for choosing the right parameters:</p> <blockquote> <div><ul class="simple"> -<li>For very fine output grids (0.25 degree or finer) the full resolution T799 or even T1279 of the operational model is required (<code class="docutils literal notranslate"><span class="pre">RESOL=799</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=0</span></code>). The highest available resolution (and the calculation of vertical velocity on the Gaussian grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>) is, however, rather demanding and feasible only for resolutions up to T799. Higher resolutions are achievable on the HPC. If data retrieval at T1279 needs to be performed on <em>ecgate</em>, the computation of the vertical velocity is feasible only on the lat/lon grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>), which also yields very good results. Please read document v20_update_protocol.pdf-v60_update_protocol.pdf to see if the errors incurred are acceptable for the planned application.</li> -<li><dl class="first docutils"> -<dt>For lower resolution (often global) output grids, calculation of vertical velocities with lower than operational spectral resolution is recommended. For global grids the following settings appear optimal:</dt> -<dd><ul class="first last"> -<li>For 1.0 degree grids: <code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL=255</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=179</span></code></li> -<li>For 0.5 degree grids: <code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL=399</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=359</span></code></li> -<li>Calculation on the lat/lon grid is not recommended for less than the operational (T1279) resolution.</li> -<li>If <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> is set to 1, only the following choices are possible for <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> on <em>ecgate</em>: 159,255,319,399,511,799, (on the HPC also 1279, 2047 in future models). This choice is restricted because a reduced Gaussian grid is defined in then ECMWF EMOSLIB only for these spectral resolutions. For <code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> can be any value below the operational resolution.</li> -<li>For <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> any resolution lower than <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> is possible. If no smoothing is desired, <code class="docutils literal notranslate"><span class="pre">SMOOTH=0</span></code> should be chosen. <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> has no effect if vertical velocity is calculated on lat/lon grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>).</li> +<li><p>For very fine output grids (0.25 degree or finer) the full resolution T799 or even T1279 of the operational model is required (<code class="docutils literal notranslate"><span class="pre">RESOL=799</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=0</span></code>). The highest available resolution (and the calculation of vertical velocity on the Gaussian grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>) is, however, rather demanding and feasible only for resolutions up to T799. Higher resolutions are achievable on the HPC. If data retrieval at T1279 needs to be performed on <em>ecgate</em>, the computation of the vertical velocity is feasible only on the lat/lon grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>), which also yields very good results. Please read document v20_update_protocol.pdf-v60_update_protocol.pdf to see if the errors incurred are acceptable for the planned application.</p></li> +<li><dl class="simple"> +<dt>For lower resolution (often global) output grids, calculation of vertical velocities with lower than operational spectral resolution is recommended. For global grids the following settings appear optimal:</dt><dd><ul> +<li><p>For 1.0 degree grids: <code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL=255</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=179</span></code></p></li> +<li><p>For 0.5 degree grids: <code class="docutils literal notranslate"><span class="pre">GAUSS=1</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL=399</span></code>, <code class="docutils literal notranslate"><span class="pre">SMOOTH=359</span></code></p></li> +<li><p>Calculation on the lat/lon grid is not recommended for less than the operational (T1279) resolution.</p></li> +<li><p>If <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> is set to 1, only the following choices are possible for <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> on <em>ecgate</em>: 159,255,319,399,511,799, (on the HPC also 1279, 2047 in future models). This choice is restricted because a reduced Gaussian grid is defined in then ECMWF EMOSLIB only for these spectral resolutions. For <code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>, <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> can be any value below the operational resolution.</p></li> +<li><p>For <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> any resolution lower than <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> is possible. If no smoothing is desired, <code class="docutils literal notranslate"><span class="pre">SMOOTH=0</span></code> should be chosen. <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> has no effect if vertical velocity is calculated on lat/lon grid (<code class="docutils literal notranslate"><span class="pre">GAUSS=0</span></code>).</p></li> </ul> </dd> </dl> </li> -<li>The on demand scripts send an error message for settings where <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> (if set) and <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> are larger than 360./<code class="docutils literal notranslate"><span class="pre">GRID</span></code>/2, since in this case, the output grid cannot resolve the highest wave numbers. The scripts continue operations, however.</li> -<li>Regional grids are not cyclic in zonal directions, but global grids are. The software assumes a cyclic grid if <code class="docutils literal notranslate"><span class="pre">RIGHT</span></code>-<code class="docutils literal notranslate"><span class="pre">LEFT</span></code> is equal to <code class="docutils literal notranslate"><span class="pre">GRID</span></code> or is equal to <code class="docutils literal notranslate"><span class="pre">GRID</span></code>-360.</li> -<li>Finally, model and flux data as well as the vertical velocity computed are written to files <code class="docutils literal notranslate"><span class="pre"><prefix>yymmddhh</span></code> for application in ATM modelling. If the parameters <code class="docutils literal notranslate"><span class="pre">OMEGA</span></code> or <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> are set, also files <code class="docutils literal notranslate"><span class="pre">OMEGAyymmddhh</span></code> are created, containing the pressure vertical velocity (omega) and the difference between omega from <code class="docutils literal notranslate"><span class="pre">MARS</span></code> and the surface pressure tendency. <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> should be zero except for debugging, since it triggers expensive calculations on the Gaussian grid.</li> +<li><p>The on demand scripts send an error message for settings where <code class="docutils literal notranslate"><span class="pre">SMOOTH</span></code> (if set) and <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> are larger than 360./<code class="docutils literal notranslate"><span class="pre">GRID</span></code>/2, since in this case, the output grid cannot resolve the highest wave numbers. The scripts continue operations, however.</p></li> +<li><p>Regional grids are not cyclic in zonal directions, but global grids are. The software assumes a cyclic grid if <code class="docutils literal notranslate"><span class="pre">RIGHT</span></code>-<code class="docutils literal notranslate"><span class="pre">LEFT</span></code> is equal to <code class="docutils literal notranslate"><span class="pre">GRID</span></code> or is equal to <code class="docutils literal notranslate"><span class="pre">GRID</span></code>-360.</p></li> +<li><p>Finally, model and flux data as well as the vertical velocity computed are written to files <code class="docutils literal notranslate"><span class="pre"><prefix>yymmddhh</span></code> for application in ATM modelling. If the parameters <code class="docutils literal notranslate"><span class="pre">OMEGA</span></code> or <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> are set, also files <code class="docutils literal notranslate"><span class="pre">OMEGAyymmddhh</span></code> are created, containing the pressure vertical velocity (omega) and the difference between omega from <code class="docutils literal notranslate"><span class="pre">MARS</span></code> and the surface pressure tendency. <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> should be zero except for debugging, since it triggers expensive calculations on the Gaussian grid.</p></li> </ul> </div></blockquote> </div> <div class="section" id="calculation-of-vertical-velocity-from-pre-calculated-mars-parameter-77"> <h2>Calculation of vertical velocity from pre-calculated MARS parameter 77<a class="headerlink" href="#calculation-of-vertical-velocity-from-pre-calculated-mars-parameter-77" title="Permalink to this headline">¶</a></h2> -<p>Since November 2008, the parameter 77 (deta/dt) is stored in <code class="docutils literal notranslate"><span class="pre">MARS</span></code> on full model levels. <code class="docutils literal notranslate"><span class="pre">FLEXTRA</span></code>/<code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> in its current version requires <code class="docutils literal notranslate"><span class="pre">deta/dt</span></code> on model half levels, multiplied by <code class="docutils literal notranslate"><span class="pre">dp/deta</span></code>. In <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>, the program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> assumes that this parameter is available if the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> parameter <code class="docutils literal notranslate"><span class="pre">ETA</span></code> is set to 1.</p> +<p>Since November 2008, the parameter 77 (deta/dt) is stored in <code class="docutils literal notranslate"><span class="pre">MARS</span></code> on full model levels. <code class="docutils literal notranslate"><span class="pre">FLEXTRA</span></code>/<code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> in its current version requires <code class="docutils literal notranslate"><span class="pre">deta/dt</span></code> on model half levels, multiplied by <code class="docutils literal notranslate"><span class="pre">dp/deta</span></code>. In <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>, the program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> assumes that this parameter is available if the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> parameter <code class="docutils literal notranslate"><span class="pre">ETA</span></code> is set to 1.</p> <p>It is recommended to use the pre-calculated parameter 77 by setting <code class="docutils literal notranslate"><span class="pre">ETA</span></code> to 1 whenever possible.</p> <p>Setting parameter <code class="docutils literal notranslate"><span class="pre">ETA</span></code> to 1 normally disables calculation of vertical velocity from the horizontal wind field, which saves a lot of computational time.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">However, the calculation on the Gaussian grid are avoided only if both <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> and <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code> are set to 0. Please set <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code> to 1 only if you are really need it for debugging since this is a very expensive option. In this case <code class="docutils literal notranslate"><span class="pre">ETAyymmddhh</span></code> files are produced that contain the vertical velocity from horizontal winds and the difference to the pre-calculated vertical velocity.</p> +<p class="admonition-title">Note</p> +<p>However, the calculation on the Gaussian grid are avoided only if both <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> and <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code> are set to 0. Please set <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code> to 1 only if you are really need it for debugging since this is a very expensive option. In this case <code class="docutils literal notranslate"><span class="pre">ETAyymmddhh</span></code> files are produced that contain the vertical velocity from horizontal winds and the difference to the pre-calculated vertical velocity.</p> </div> <p>The parameters <code class="docutils literal notranslate"><span class="pre">RESOL</span></code>, <code class="docutils literal notranslate"><span class="pre">GRID</span></code>, <code class="docutils literal notranslate"><span class="pre">UPPER</span></code>, <code class="docutils literal notranslate"><span class="pre">LOWER</span></code>, <code class="docutils literal notranslate"><span class="pre">LEFT</span></code>, <code class="docutils literal notranslate"><span class="pre">RIGHT</span></code> still apply. As for calculations on the Gaussian grid, the spectral resolution parameter <code class="docutils literal notranslate"><span class="pre">RESOL</span></code> should be compatible with the grid resolution (see previous subsection).</p> <div class="toctree-wrapper compound"> @@ -264,7 +262,7 @@ following guidance can be given for choosing the right parameters:</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Ecmwf/access.html b/Documentation/html/Ecmwf/access.html index c67083684f4181895348b5085c641ead66b8cd35..80e61ef78cdba06e42fe811091ec7c7ef1e6ee8d 100644 --- a/Documentation/html/Ecmwf/access.html +++ b/Documentation/html/Ecmwf/access.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -177,15 +177,15 @@ <div class="section" id="access-modes"> <h1>Access Modes<a class="headerlink" href="#access-modes" title="Permalink to this headline">¶</a></h1> <p>Access to the ECMWF Mars archive is divided into two groups: <strong>member state</strong> users and <strong>public</strong> users.</p> -<dl class="docutils"> -<dt><strong>Member state user</strong>:</dt> -<dd>This access mode allows the user to work directly on the ECMWF Linux Member State Servers or via a Web Access Toolkit <code class="docutils literal notranslate"><span class="pre">ecaccess</span></code> through a local Member State Gateway Server. This enables the user to have direct and full access to the Mars archive. There might be some limitations in user rights such as the declined access to the latest forecasts. This has to be discussed with the <a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Computing Representative</a>. This user group is also able to work from their local facilities without a gateway server in the same way a <strong>public</strong> user would. The only difference is the connection with the Web API. However, this is automatically selected by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</dd> -<dt><strong>Public user</strong>:</dt> -<dd>This access mode allows every user to access the ECMWF <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets">public datasets</a> from their local facilities. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is able (tested for the use with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>) to extract the re-analysis datasets such as ERA-Interim and CERA-20C. The main difference to the <strong>member state user</strong> is the method of access with the Web API and the availability of data. For example, in ERA-Interim there is only a 6-hourly temporal resolution instead of 3 hours. The access method is selected by providing the command line argument “public=1” and providing the MARS keyword “dataset” in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file. Also, the user has to explicitly accept the license of the dataset to be retrieved. This can be done as described in the installation process at section <a class="reference internal" href="../installation.html#ref-licence"><span class="std std-ref">Licence agreement for public datasets</span></a>.</dd> +<dl class="simple"> +<dt><strong>Member state user</strong>:</dt><dd><p>This access mode allows the user to work directly on the ECMWF Linux Member State Servers or via a Web Access Toolkit <code class="docutils literal notranslate"><span class="pre">ecaccess</span></code> through a local Member State Gateway Server. This enables the user to have direct and full access to the Mars archive. There might be some limitations in user rights such as the declined access to the latest forecasts. This has to be discussed with the <a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Computing Representative</a>. This user group is also able to work from their local facilities without a gateway server in the same way a <strong>public</strong> user would. The only difference is the connection with the Web API. However, this is automatically selected by <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> +</dd> +<dt><strong>Public user</strong>:</dt><dd><p>This access mode allows every user to access the ECMWF <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets">public datasets</a> from their local facilities. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is able (tested for the use with <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code>) to extract the re-analysis datasets such as ERA-Interim and CERA-20C. The main difference to the <strong>member state user</strong> is the method of access with the Web API and the availability of data. For example, in ERA-Interim there is only a 6-hourly temporal resolution instead of 3 hours. The access method is selected by providing the command line argument “public=1” and providing the MARS keyword “dataset” in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file. Also, the user has to explicitly accept the license of the dataset to be retrieved. This can be done as described in the installation process at section <a class="reference internal" href="../installation.html#ref-licence"><span class="std std-ref">Licence agreement for public datasets</span></a>.</p> +</dd> </dl> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">The availability of the public dataset <em>ERA5</em> with the ECMWF Web API was cancelled in March 2019. The oportunity of local retrieval of this dataset was moved to the <a class="reference external" href="https://cds.climate.copernicus.eu">Climate Data Store</a> which uses another Web API named <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a>. This Data Store stores the data on explicit webservers for faster and easier access. Unfortunately, for <em>ERA5</em> there are only surface level and pressure level data available for <em>public users</em>. In the case of a <em>member user</em> it is possible to bypass the request to the MARS archive from ECMWF to retrieve the data. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is already modified to use this API so <em>member user</em> can already retrieve <em>ERA5</em> data while <em>public users</em> have to wait until model level are available.</p> +<p class="admonition-title">Note</p> +<p>The availability of the public dataset <em>ERA5</em> with the ECMWF Web API was cancelled in March 2019. The oportunity of local retrieval of this dataset was moved to the <a class="reference external" href="https://cds.climate.copernicus.eu">Climate Data Store</a> which uses another Web API named <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a>. This Data Store stores the data on explicit webservers for faster and easier access. Unfortunately, for <em>ERA5</em> there are only surface level and pressure level data available for <em>public users</em>. In the case of a <em>member user</em> it is possible to bypass the request to the MARS archive from ECMWF to retrieve the data. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is already modified to use this API so <em>member user</em> can already retrieve <em>ERA5</em> data while <em>public users</em> have to wait until model level are available.</p> </div> <p>For information on how to register see <a class="reference internal" href="../installation.html#ref-registration"><span class="std std-ref">Registration at ECMWF</span></a>.</p> <div class="toctree-wrapper compound"> @@ -212,7 +212,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Ecmwf/ec-links.html b/Documentation/html/Ecmwf/ec-links.html index 9607685cd8d67d9148df142cfc7f46f5b120f661..42da733c33585d8cc38578de3f58fe23f3caa67b 100644 --- a/Documentation/html/Ecmwf/ec-links.html +++ b/Documentation/html/Ecmwf/ec-links.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -176,87 +176,75 @@ <div class="section" id="link-collection-for-quick-finder"> <h1>Link Collection for Quick finder<a class="headerlink" href="#link-collection-for-quick-finder" title="Permalink to this headline">¶</a></h1> -<dl class="docutils"> -<dt>ECMWF - General Overview</dt> -<dd><p class="first"><a class="reference external" href="https://www.ecmwf.int/">ECMWF Home</a></p> +<dl> +<dt>ECMWF - General Overview</dt><dd><p><a class="reference external" href="https://www.ecmwf.int/">ECMWF Home</a></p> <p><a class="reference external" href="https://www.ecmwf.int/en/learning">ECMWF Training</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/UDOC/User+Documentation">General User Documentation</a></p> -<p class="last"><a class="reference external" href="https://confluence.ecmwf.int/display/SUP">Software Support</a></p> +<p><a class="reference external" href="https://confluence.ecmwf.int/display/SUP">Software Support</a></p> </dd> -<dt>MARS</dt> -<dd><p class="first"><a class="reference external" href="https://confluence.ecmwf.int//display/UDOC/MARS+user+documentation">MARS user documentation</a></p> +<dt>MARS</dt><dd><p><a class="reference external" href="https://confluence.ecmwf.int//display/UDOC/MARS+user+documentation">MARS user documentation</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/UDOC/MARS+keywords">MARS Keywords</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/MARS+content">MARS Content</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/MARS+actions">MARS Actions</a></p> -<p class="last"><a class="reference external" href="https://apps.ecmwf.int/codes/grib/param-db">Parameter Database</a></p> +<p><a class="reference external" href="https://apps.ecmwf.int/codes/grib/param-db">Parameter Database</a></p> </dd> -<dt>Registration</dt> -<dd><p class="first"><a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Contact of Computing Representative’s</a></p> +<dt>Registration</dt><dd><p><a class="reference external" href="https://www.ecmwf.int/en/about/contact-us/computing-representatives">Contact of Computing Representative’s</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/WEBAPI/Access+MARS">Public registration for ECMWF Web API</a></p> -<p class="last"><a class="reference external" href="https://cds.climate.copernicus.eu/user/register">CDS Registration</a></p> +<p><a class="reference external" href="https://cds.climate.copernicus.eu/user/register">CDS Registration</a></p> </dd> -<dt>Available Member State Datasets</dt> -<dd><p class="first"><a class="reference external" href="http://apps.ecmwf.int/archive-catalogue/">Web Interface for accessing member state datasets</a></p> -<p class="last"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets">Available datasets for member state users</a></p> +<dt>Available Member State Datasets</dt><dd><p><a class="reference external" href="http://apps.ecmwf.int/archive-catalogue/">Web Interface for accessing member state datasets</a></p> +<p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets">Available datasets for member state users</a></p> </dd> -<dt>Available Public Datasets</dt> -<dd><p class="first"><a class="reference external" href="http://apps.ecmwf.int/datasets/">Web Interface for accessing public datasets</a></p> +<dt>Available Public Datasets</dt><dd><p><a class="reference external" href="http://apps.ecmwf.int/datasets/">Web Interface for accessing public datasets</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Available+ECMWF+Public+Datasets">ECMWF’s public datasets</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/WEBAPI/Available+ECMWF+Public+Datasets">Public dataset Licences</a></p> -<p class="last"><a class="reference external" href="https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset">ERA5 public dataset Licence</a></p> +<p><a class="reference external" href="https://cds.climate.copernicus.eu/cdsapp#!/search?type=dataset">ERA5 public dataset Licence</a></p> </dd> -<dt>Datasets</dt> -<dd><dl class="first last docutils"> -<dt>Overview</dt> -<dd><p class="first"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets">Complete list of datasets</a></p> +<dt>Datasets</dt><dd><dl> +<dt>Overview</dt><dd><p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets">Complete list of datasets</a></p> <p><a class="reference external" href="https://www.ecmwf.int/en/research/climate-reanalysis">What is climate reanalysis</a></p> -<p class="last"><a class="reference external" href="https://confluence.ecmwf.int/display/FUG/1+Introduction">Forecast user guide</a></p> +<p><a class="reference external" href="https://confluence.ecmwf.int/display/FUG/1+Introduction">Forecast user guide</a></p> </dd> -<dt>Real-time (Operational)</dt> -<dd><p class="first"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/catalogue-ecmwf-real-time-products">List of real_time datasets</a></p> +<dt>Real-time (Operational)</dt><dd><p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/catalogue-ecmwf-real-time-products">List of real_time datasets</a></p> <p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/set-i">Atmospheric model - HRES (our typical operational dataset)</a></p> -<p class="last"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/set-iii">Atmospheric model - ENS (15-day ensemble forecast)</a></p> +<p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/set-iii">Atmospheric model - ENS (15-day ensemble forecast)</a></p> </dd> -<dt>ERA-Interim</dt> -<dd><p class="first"><a class="reference external" href="https://confluence.ecmwf.int/display/CKB/What+is+ERA-Interim">What is ERA-Interim</a></p> +<dt>ERA-Interim</dt><dd><p><a class="reference external" href="https://confluence.ecmwf.int/display/CKB/What+is+ERA-Interim">What is ERA-Interim</a></p> <p><a class="reference external" href="https://www.ecmwf.int/en/elibrary/8174-era-interim-archive-version-20">ERA-Interim documentation</a></p> -<p class="last"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/era-interim">ERA-Interim dataset</a></p> +<p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/era-interim">ERA-Interim dataset</a></p> </dd> -<dt>CERA-20C</dt> -<dd><p class="first"><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/What+is+CERA-20C">What is CERA-20C</a></p> -<p class="last"><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/cera-20c">CERA-20C dataset</a></p> +<dt>CERA-20C</dt><dd><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/What+is+CERA-20C">What is CERA-20C</a></p> +<p><a class="reference external" href="https://www.ecmwf.int/en/forecasts/datasets/archive-datasets/reanalysis-datasets/cera-20c">CERA-20C dataset</a></p> </dd> -<dt>ERA5</dt> -<dd><p class="first"><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/What+is+ERA5">What is ERA5</a></p> +<dt>ERA5</dt><dd><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/What+is+ERA5">What is ERA5</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/pages/viewpage.action?pageId=74764925">What are the changes from ERA-Interim to ERA5</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/CKB/How+to+download+ERA5">How to download ERA5 via Climate Data Store</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/CKB/How+to+migrate+from+ECMWF+Web+API+to+CDS+API">How to migrate from ECMWF Web API to CDS API</a></p> -<p class="last"><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation">ERA5 Documentation</a></p> +<p><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/ERA5+data+documentation">ERA5 Documentation</a></p> </dd> </dl> </dd> -<dt>Third Party Libraries</dt> -<dd><p class="first"><a class="reference external" href="https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API Home</a></p> +<dt>Third Party Libraries</dt><dd><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API Home</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran">Building ECMWF software with gfortran</a></p> <p><a class="reference external" href="http://www.fftw.org">FFTW</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">EMOSLIB</a></p> <p><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">ECcodes</a></p> <p><a class="reference external" href="https://confluence.ecmwf.int/display/CKB/C3S+ERA5%3A+Web+API+to+CDS+API">C3S ERA5: Web API to CDS API</a></p> -<p class="last"><a class="reference external" href="https://confluence.ecmwf.int/display/ECAC/ECaccess+Home">ECaccess Documentation</a></p> +<p><a class="reference external" href="https://confluence.ecmwf.int/display/ECAC/ECaccess+Home">ECaccess Documentation</a></p> </dd> -<dt>Plotting GRIB fields:</dt> -<dd><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/How+to+plot+GRIB+files+with+Python+and+matplotlib">Example Python script to plot GRIB files</a></dd> -<dt>Scientific Information</dt> -<dd><p class="first"><a class="reference external" href="https://confluence.ecmwf.int/display/FCST/Introducing+the+octahedral+reduced+Gaussian+grid">Octahedral reduced Gaussian Grid</a></p> -<p class="last"><a class="reference external" href="https://www.ecmwf.int/en/newsletter/147/meteorology/use-high-density-observations-precipitation-verification">Precipitation</a></p> +<dt>Plotting GRIB fields:</dt><dd><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/CKB/How+to+plot+GRIB+files+with+Python+and+matplotlib">Example Python script to plot GRIB files</a></p> +</dd> +<dt>Scientific Information</dt><dd><p><a class="reference external" href="https://confluence.ecmwf.int/display/FCST/Introducing+the+octahedral+reduced+Gaussian+grid">Octahedral reduced Gaussian Grid</a></p> +<p><a class="reference external" href="https://www.ecmwf.int/en/newsletter/147/meteorology/use-high-density-observations-precipitation-verification">Precipitation</a></p> </dd> </dl> <p>Technical Information of ECMWF serves</p> <blockquote> -<div><a class="reference external" href="https://confluence.ecmwf.int/download/attachments/73008494/intro-slurm-2017.pdf?version=1&modificationDate=1488574096323&api=v2">Introduction presentation to SLURM</a></div></blockquote> -<dl class="docutils"> -<dt>Troubleshooting</dt> -<dd><a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Web-API+Troubleshooting">ECMWF Web API Troubleshooting</a></dd> +<div><p><a class="reference external" href="https://confluence.ecmwf.int/download/attachments/73008494/intro-slurm-2017.pdf?version=1&modificationDate=1488574096323&api=v2">Introduction presentation to SLURM</a></p> +</div></blockquote> +<dl class="simple"> +<dt>Troubleshooting</dt><dd><p><a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/Web-API+Troubleshooting">ECMWF Web API Troubleshooting</a></p> +</dd> </dl> <div class="toctree-wrapper compound"> </div> @@ -282,7 +270,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Ecmwf/hintsecmwf.html b/Documentation/html/Ecmwf/hintsecmwf.html index 711730ff5c5efa452d017e542b1ecafced695217..f25c6a6e72235768ec69204fa0ba7d14168265f4 100644 --- a/Documentation/html/Ecmwf/hintsecmwf.html +++ b/Documentation/html/Ecmwf/hintsecmwf.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -181,7 +181,7 @@ <h1>Hints to specify dataset retrieval<a class="headerlink" href="#hints-to-specify-dataset-retrieval" title="Permalink to this headline">¶</a></h1> <div class="contents local topic" id="contents"> <ul class="simple"> -<li><a class="reference internal" href="#how-can-i-find-out-what-data-is-available" id="id1">How can I find out what data is available?</a></li> +<li><p><a class="reference internal" href="#how-can-i-find-out-what-data-is-available" id="id1">How can I find out what data is available?</a></p></li> </ul> </div> <div class="section" id="how-can-i-find-out-what-data-is-available"> @@ -214,7 +214,7 @@ and click yourself through the steps to define your set of data and see what is <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Ecmwf/msdata.html b/Documentation/html/Ecmwf/msdata.html index bcf5511ffc433ef49572a1f0f736d42aabb14152..7d80d2e0e55075ad04db6e4c6a69364b4d30768a 100644 --- a/Documentation/html/Ecmwf/msdata.html +++ b/Documentation/html/Ecmwf/msdata.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -182,16 +182,16 @@ <h1>Available Datasets for Member State users<a class="headerlink" href="#available-datasets-for-member-state-users" title="Permalink to this headline">¶</a></h1> <div class="section" id="model-level-data"> <h2>Model level data<a class="headerlink" href="#model-level-data" title="Permalink to this headline">¶</a></h2> -<div class="figure"> +<div class="figure align-default"> <img alt="../_images/ECMWF_FPparameter_ml.png" src="../_images/ECMWF_FPparameter_ml.png" /> </div> </div> <div class="section" id="surface-level-data"> <h2>Surface level data<a class="headerlink" href="#surface-level-data" title="Permalink to this headline">¶</a></h2> -<div class="figure"> +<div class="figure align-default"> <img alt="../_images/ECMWF_FPparameter_sfc-0.png" src="../_images/ECMWF_FPparameter_sfc-0.png" /> </div> -<div class="figure"> +<div class="figure align-default"> <img alt="../_images/ECMWF_FPparameter_sfc-1.png" src="../_images/ECMWF_FPparameter_sfc-1.png" /> </div> <div class="toctree-wrapper compound"> @@ -219,7 +219,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Ecmwf/pubdata.html b/Documentation/html/Ecmwf/pubdata.html index 08afc4799ef8a718549d83a3714d08f543e6c58e..0357524ed95091ca534c1f114b3bd16ddd359f6b 100644 --- a/Documentation/html/Ecmwf/pubdata.html +++ b/Documentation/html/Ecmwf/pubdata.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -177,7 +177,8 @@ <div class="section" id="available-datasets-for-public-users"> <h1>Available Datasets for Public users<a class="headerlink" href="#available-datasets-for-public-users" title="Permalink to this headline">¶</a></h1> <blockquote> -<div>IN PREPARATION</div></blockquote> +<div><p>IN PREPARATION</p> +</div></blockquote> <div class="toctree-wrapper compound"> </div> </div> @@ -202,7 +203,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Evaluation/metrics.html b/Documentation/html/Evaluation/metrics.html index b5b6557935127b072737e80b47393f11b343ab06..bb80168958e83ae8b7043937101946c6acd7f548 100644 --- a/Documentation/html/Evaluation/metrics.html +++ b/Documentation/html/Evaluation/metrics.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -175,7 +175,8 @@ <div class="section" id="metrics"> <h1>Metrics<a class="headerlink" href="#metrics" title="Permalink to this headline">¶</a></h1> <blockquote> -<div>UNDER CONSTRUCTION</div></blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> <div class="toctree-wrapper compound"> </div> </div> @@ -200,7 +201,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Evaluation/staticcode.html b/Documentation/html/Evaluation/staticcode.html index 7df9c2123530e0f0dec45c2e15d5a68071cc786b..c7a1afb7242d837e9436a0e1c1d695a8be070878 100644 --- a/Documentation/html/Evaluation/staticcode.html +++ b/Documentation/html/Evaluation/staticcode.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -175,7 +175,8 @@ <div class="section" id="static-code-analysis"> <h1>Static Code Analysis<a class="headerlink" href="#static-code-analysis" title="Permalink to this headline">¶</a></h1> <blockquote> -<div>UNDER CONSTRUCTION</div></blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> <div class="toctree-wrapper compound"> </div> </div> @@ -200,7 +201,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Evaluation/testcases.html b/Documentation/html/Evaluation/testcases.html index 8cee1c0282ad48d8ff493144fa6ce781e74993b2..3561b860ad298a89f272c21283d35b9aa711f13f 100644 --- a/Documentation/html/Evaluation/testcases.html +++ b/Documentation/html/Evaluation/testcases.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -180,9 +180,15 @@ <h1>Testcases<a class="headerlink" href="#testcases" title="Permalink to this headline">¶</a></h1> <div class="section" id="comparison-of-mars-requests"> <h2>Comparison of MARS requests<a class="headerlink" href="#comparison-of-mars-requests" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> </div> <div class="section" id="comparison-of-grib-files"> <h2>Comparison of grib files<a class="headerlink" href="#comparison-of-grib-files" title="Permalink to this headline">¶</a></h2> +<blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> <div class="toctree-wrapper compound"> </div> </div> @@ -208,7 +214,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Installation/gateway.html b/Documentation/html/Installation/gateway.html index 0f4e077f8b21977bdf6ea4579530421ecf597cfd..43725a53b81fc20c34b4315fd7a103b097218caa 100644 --- a/Documentation/html/Installation/gateway.html +++ b/Documentation/html/Installation/gateway.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -192,9 +192,9 @@ <div class="section" id="gateway-mode-dependencies"> <span id="ref-req-gateway"></span><span id="ref-gateway-mode"></span><h2>Gateway mode - dependencies<a class="headerlink" href="#gateway-mode-dependencies" title="Permalink to this headline">¶</a></h2> <ul class="simple"> -<li><a class="reference external" href="https://www.python.org/downloads/">Python3</a></li> -<li><a class="reference external" href="http://www.numpy.org/">numpy</a></li> -<li><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></li> +<li><p><a class="reference external" href="https://www.python.org/downloads/">Python3</a></p></li> +<li><p><a class="reference external" href="http://www.numpy.org/">numpy</a></p></li> +<li><p><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></p></li> </ul> </div> <div class="section" id="prepare-gateway-environment"> @@ -203,11 +203,11 @@ <p>Please see <a class="reference external" href="https://confluence.ecmwf.int/display/ECAC/ECaccess+Home">ECMWF’s instructions on gateway server</a> to establish the gateway server if not already in place. Additionally, to be able to use the ECaccess file transfer service <strong>ectrans</strong> it is necessary to create a so-called association. The easiest way is to visit the ECaccess Member State Gateway website (e.g. <a class="reference external" href="https://msgatway.ecmwf.int">https://msgatway.ecmwf.int</a>) and follow the instructions in the short <a class="reference external" href="https://confluence.ecmwf.int/download/attachments/45759146/ECaccess.pdf">ECaccess Presentation</a> (page 17 ff.). Additional documentation can be found on the <a class="reference external" href="https://confluence.ecmwf.int/display/ECAC/Unattended+file+transfer+-+ectrans">ECMWF ectrans site</a>.</p> <p>The next step is to create an <em>ecaccess certificate</em> to be able to send and receive files from and to the ECMWF server. You can do this by using the <code class="docutils literal notranslate"><span class="pre">ecaccess-certificate-create</span></code> command on the gateway server. You will be prompted for your ECMWF member state user name and a password (generated by a token). This certificate has to be renewed periodically (every 7 days).</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ ecaccess-certificate-create -Please enter your user-id: example_username +Please enter your user-id: <username> Your passcode: *** </pre></div> </div> -<p>The easiest way to install all required packages is to use the package management system of your Linux distribution which required admin rights. +<p>The easiest way to install all required packages is to use the package management system of your Linux distribution which requires admin rights. The installation was tested under <em>GNU/Linux Debian buster</em> and <em>Ubuntu 18.04 Bionic Beaver</em>.</p> <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># On a Debian or Debian-derived sytem (e. g. Ubuntu) system you may use the following commands (or equivalent commands of your preferred package manager):</span> <span class="c1"># (if not already available):</span> @@ -230,27 +230,59 @@ If there are no error messages, you succeeded in setting up the environment.</p> </div> <div class="section" id="gateway-installation"> <span id="ref-install-gateway"></span><h2>Gateway installation<a class="headerlink" href="#gateway-installation" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> will be run on an ECMWF server which makes the setup the same as for the <strong>remote mode</strong>. In the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script <a class="reference external" href="Documentation/Input/setup.html">[ref]</a>, select the <code class="docutils literal notranslate"><span class="pre">makefile.gfortran</span></code> for the <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> Fortran program and the ECMWF server (<em>target</em>) you would like to use. +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> will be run on an ECMWF server which makes the setup the same as for the <strong>remote mode</strong>. In the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script <a class="reference internal" href="../Documentation/Input/setup.html"><span class="doc">The Installation Script - setup.sh</span></a>, select the <code class="docutils literal notranslate"><span class="pre">makefile_ecgate</span></code> or <code class="docutils literal notranslate"><span class="pre">makefile_cray</span></code> for the <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> Fortran program and the ECMWF server (<em>target</em>) you would like to use. The job script, send to the job queue via the ECaccess software, loads the required modules from the module system. For enabling the file transfer via the gateway, you have to set the <em>ECUID</em>, <em>ECGID</em>, <em>GATEWAY</em> and <em>DESTINATION</em> parameter values.</p> -<div class="literal-block-wrapper docutils container" id="setup-sh"> -<div class="code-block-caption"><span class="caption-text">‘Example settings for a gateway installation.’</span><a class="headerlink" href="#setup-sh" title="Permalink to this code">¶</a></div> -<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -----------------------------------------------------------------</span> +<p>Open <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> with your preferred editor (e.g., nano) and adapt the values:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 50%" /> +<col style="width: 50%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p>Use this for target = <strong>ectrans</strong></p></td> +<td><p>Use this for target = <strong>cca</strong> or <strong>ccb</strong></p></td> +</tr> +<tr class="row-even"><td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>... +<span class="c1"># -----------------------------------------</span> <span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> <span class="c1">#</span> <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETER</span> <span class="c1">#</span> <span class="nv">TARGET</span><span class="o">=</span><span class="s1">'ecgate'</span> -<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile.gfortran'</span> -<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'uid'</span> -<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'gid'</span> -<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'localserver.tld'</span> -<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'association_name@genericSftp'</span> +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_ecgate'</span> +<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'<username>'</span> +<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'<groupID>'</span> +<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'<gatewayname>'</span> +<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'<assoc_name>@genericSftp'</span> <span class="nv">INSTALLDIR</span><span class="o">=</span>None <span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">'job.template'</span> <span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> +... </pre></div> </div> +</td> +<td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>... +<span class="c1"># -----------------------------------------</span> +<span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> +<span class="c1">#</span> +<span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETER</span> +<span class="c1">#</span> +<span class="nv">TARGET</span><span class="o">=</span><span class="s1">'cca'</span> +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_cray'</span> +<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'<username>'</span> +<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'<groupID>'</span> +<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'<gatewayname>'</span> +<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'<assoc_name>@genericSftp'</span> +<span class="nv">INSTALLDIR</span><span class="o">=</span>None +<span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">'job.template'</span> +<span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> +... +</pre></div> </div> +</td> +</tr> +</tbody> +</table> <p>Afterwards, type:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ ./setup.sh </pre></div> @@ -262,15 +294,16 @@ Job compilation script has been submitted to ecgate <span class="k">for</span> i You should get an email with subject <span class="s2">"flexcompile"</span> within the next few minutes! </pre></div> </div> -<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a “SUCCESS” statement in the last line:</p> -<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp phgrreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp grphreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp ftrafo.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 --rwxr-x---. <span class="m">1</span> USER at <span class="m">353134</span> May <span class="m">23</span> <span class="m">12</span>:27 CONVERT2 +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a “SUCCESS” statement in the last line:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./rwgrib2.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./phgrreal.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./grphreal.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./ftrafo.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./calc_etadot.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./posnam.f90 +gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp +ln -sf calc_etadot_fast.out calc_etadot +lrwxrwxrwx. <span class="m">1</span> <username> at <span class="m">20</span> Mar <span class="m">8</span> <span class="m">14</span>:11 calc_etadot -> calc_etadot_fast.out SUCCESS! </pre></div> </div> @@ -297,7 +330,7 @@ SUCCESS! <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Installation/local.html b/Documentation/html/Installation/local.html index d45443650d404ab956a7891b70a2dc8b34d434c7..71c6bcd6884884b2f3a583db8f279755aa037830 100644 --- a/Documentation/html/Installation/local.html +++ b/Documentation/html/Installation/local.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -194,29 +194,29 @@ <p>The installation is the same for the access modes <strong>member</strong> and <strong>public</strong>.</p> <p>The environment on your local system has to provide these software packages and libraries, since the preparation of the extraction and the post-processing is done on the local machine:</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="74%" /> -<col width="26%" /> +<col style="width: 74%" /> +<col style="width: 26%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td>Python part</td> -<td>Fortran part</td> +<tbody> +<tr class="row-odd"><td><p>Python part</p></td> +<td><p>Fortran part</p></td> </tr> -<tr class="row-even"><td><ul class="first last simple"> -<li><a class="reference external" href="https://www.python.org/downloads/">Python3</a></li> -<li><a class="reference external" href="http://www.numpy.org/">numpy</a></li> -<li><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></li> -<li><a class="reference external" href="https://packages.debian.org/sid/python3-eccodes">eccodes for python</a></li> -<li><a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ecmwf-api-client</a> (everything except ERA5)</li> -<li><a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">cdsapi</a> (just for ERA5)</li> +<tr class="row-even"><td><ul class="simple"> +<li><p><a class="reference external" href="https://www.python.org/downloads/">Python3</a></p></li> +<li><p><a class="reference external" href="http://www.numpy.org/">numpy</a></p></li> +<li><p><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></p></li> +<li><p><a class="reference external" href="https://packages.debian.org/sid/python3-eccodes">eccodes for python</a></p></li> +<li><p><a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ecmwf-api-client</a> (everything except ERA5)</p></li> +<li><p><a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">cdsapi</a> (just for ERA5 and member user)</p></li> </ul> </td> -<td><ul class="first last simple"> -<li><a class="reference external" href="https://gcc.gnu.org/wiki/GFortran">gfortran</a></li> -<li><a class="reference external" href="http://www.fftw.org">fftw3</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">eccodes</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">emoslib</a></li> +<td><ul class="simple"> +<li><p><a class="reference external" href="https://gcc.gnu.org/wiki/GFortran">gfortran</a></p></li> +<li><p><a class="reference external" href="http://www.fftw.org">fftw3</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">eccodes</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">emoslib</a></p></li> </ul> </td> </tr> @@ -247,25 +247,25 @@ The installation was tested on a <em>Debian GNU/Linux buster</em> and an <em>Ubu </pre></div> </div> <div class="admonition note"> -<p class="first admonition-title">Note</p> +<p class="admonition-title">Note</p> <p>In case you would like to use Anaconda Python we recommend you follow the installation instructions of <a class="reference external" href="https://docs.anaconda.com/anaconda/install/linux/">Anaconda Python Installation for Linux</a> and then install the <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> package from <code class="docutils literal notranslate"><span class="pre">conda</span></code> with:</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>conda install conda-forge::python-eccodes +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda install conda-forge::python-eccodes </pre></div> </div> </div> <p>The CDS API (cdsapi) is required for ERA5 data and the ECMWF Web API (ecmwf-api-client) for all other public datasets.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Since <strong>public users</strong> currently don’t have access to the full <em>ERA5</em> dataset they can skip the installation of the <code class="docutils literal notranslate"><span class="pre">CDS</span> <span class="pre">API</span></code>.</p> +<p class="admonition-title">Note</p> +<p>Since <strong>public users</strong> currently don’t have access to the full <em>ERA5</em> dataset they can skip the installation of the <code class="docutils literal notranslate"><span class="pre">CDS</span> <span class="pre">API</span></code>.</p> </div> <p>Both user groups have to provide keys with their credentials for the Web API’s in their home directory. Therefore, follow these instructions:</p> -<dl class="docutils"> -<dt>ECMWF Web API:</dt> -<dd>Go to <a class="reference external" href="https://confluence.ecmwf.int//display/WEBAPI/Access+MARS">MARS access</a> website and log in with your credentials. Afterwards, on this site in section “Install ECMWF KEY” the key for the ECMWF Web API should be listed. Please follow the instructions in this section under 1 (save the key in a file <cite>.ecmwfapirc</cite> in your home directory).</dd> -<dt>CDS API:</dt> -<dd>Go to ‘CDS API registration’_ and register there too. Log in at the <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">cdsapi</a> website and follow the instructions at section “Install the CDS API key” to save your credentials in a <cite>.cdsapirc</cite> file.</dd> +<dl class="simple"> +<dt>ECMWF Web API:</dt><dd><p>Go to <a class="reference external" href="https://confluence.ecmwf.int//display/WEBAPI/Access+MARS">MARS access</a> website and log in with your credentials. Afterwards, on this site in section “Install ECMWF KEY” the key for the ECMWF Web API should be listed. Please follow the instructions in this section under 1 (save the key in a file <cite>.ecmwfapirc</cite> in your home directory).</p> +</dd> +<dt>CDS API:</dt><dd><p>Go to <a class="reference external" href="https://cds.climate.copernicus.eu/user/register">CDS API registration</a> and register there too. Log in at the <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">cdsapi</a> website and follow the instructions at section “Install the CDS API key” to save your credentials in a <cite>.cdsapirc</cite> file.</p> +</dd> </dl> </div> <div class="section" id="test-local-environment"> @@ -284,16 +284,16 @@ The installation was tested on a <em>Debian GNU/Linux buster</em> and an <em>Ubu <p>You can start very simple test retrievals for both Web APIs to be sure that everything works. This is recommended to minimise the range of possible errors using <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> later on.</p> <div class="section" id="ecmwf-web-api"> <h4>ECMWF Web API<a class="headerlink" href="#ecmwf-web-api" title="Permalink to this headline">¶</a></h4> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="50%" /> -<col width="50%" /> +<col style="width: 50%" /> +<col style="width: 50%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td>Please use this piece of Python code for <strong>Member user</strong>:</td> -<td>Please use this piece of Python code for <strong>Public user</strong>:</td> +<tbody> +<tr class="row-odd"><td><p>Please use this piece of Python code for <strong>Member user</strong>:</p></td> +<td><p>Please use this piece of Python code for <strong>Public user</strong>:</p></td> </tr> -<tr class="row-even"><td><div class="first last highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">ecmwfapi</span> <span class="kn">import</span> <span class="n">ECMWFService</span> +<tr class="row-even"><td><div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">ecmwfapi</span> <span class="kn">import</span> <span class="n">ECMWFService</span> <span class="n">server</span> <span class="o">=</span> <span class="n">ECMWFService</span><span class="p">(</span><span class="s1">'mars'</span><span class="p">)</span> @@ -313,7 +313,7 @@ The installation was tested on a <em>Debian GNU/Linux buster</em> and an <em>Ubu </pre></div> </div> </td> -<td><div class="first last highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">ecmwfapi</span> <span class="kn">import</span> <span class="n">ECMWFDataServer</span> +<td><div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">ecmwfapi</span> <span class="kn">import</span> <span class="n">ECMWFDataServer</span> <span class="n">server</span> <span class="o">=</span> <span class="n">ECMWFDataServer</span><span class="p">()</span> @@ -388,32 +388,24 @@ The installation was tested on a <em>Debian GNU/Linux buster</em> and an <em>Ubu </div> <div class="section" id="local-installation"> <span id="ref-install-local"></span><h2>Local installation<a class="headerlink" href="#local-installation" title="Permalink to this headline">¶</a></h2> -<p>First prepare the Fortran <code class="docutils literal notranslate"><span class="pre">makefile</span></code> for your environment and set it in the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script. (See section <span class="xref std std-ref">ref-convert</span> for information on the Fortran program.) -<code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> comes with two <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> prepared for the <code class="docutils literal notranslate"><span class="pre">gfortran</span></code> and -the <code class="docutils literal notranslate"><span class="pre">ifort</span></code> compiler. The <code class="docutils literal notranslate"><span class="pre">gfortran</span></code> version assumes that <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> and <code class="docutils literal notranslate"><span class="pre">emoslib</span></code> are installed as distribution packages.</p> -<blockquote> -<div><ul class="simple"> -<li>makefile.local.gfortran</li> -<li>makefile.local.ifort</li> -</ul> -</div></blockquote> -<p>They can be found at <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Fortran</span></code>, where -<code class="docutils literal notranslate"><span class="pre">vX.X</span></code> should be substituted with the current version number.</p> +<p>First prepare the Fortran <code class="docutils literal notranslate"><span class="pre">makefile</span></code> for your environment and set it in the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script. (See section <a class="reference internal" href="../Documentation/Input/fortran_makefile.html#ref-convert"><span class="std std-ref">Fortran Makefile</span></a> for more information.) +<code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> comes with two <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> prepared for the <code class="docutils literal notranslate"><span class="pre">gfortran</span></code> compiler. One for the normal use <code class="docutils literal notranslate"><span class="pre">makefile_fast</span></code> and one for debugging <code class="docutils literal notranslate"><span class="pre">makefile_debug</span></code> which is usually only resonable for developers.</p> +<p>They assume that <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> and <code class="docutils literal notranslate"><span class="pre">emoslib</span></code> are installed as distribution packages and can be found at <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Fortran</span></code>, where <code class="docutils literal notranslate"><span class="pre">vX.X</span></code> should be substituted with the current version number.</p> <div class="admonition caution"> -<p class="first admonition-title">Caution</p> -<p class="last">It is necessary to adapt <strong>ECCODES_INCLUDE_DIR</strong> and <strong>ECCODES_LIB</strong> in these +<p class="admonition-title">Caution</p> +<p>It is necessary to adapt <strong>ECCODES_INCLUDE_DIR</strong> and <strong>ECCODES_LIB</strong> in these <code class="docutils literal notranslate"><span class="pre">makefiles</span></code> if other than standard paths are used.</p> </div> <p>So starting from the root directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>, go to the <code class="docutils literal notranslate"><span class="pre">Fortran</span></code> source directory and open the <code class="docutils literal notranslate"><span class="pre">makefile</span></code> of your choice to modify with an editor of your choice. We use the <code class="docutils literal notranslate"><span class="pre">nedit</span></code> in this case.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> flex_extract_vX.X/Source/Fortran -nedit makefile.local.gfortran +nedit makefile_fast </pre></div> </div> <p>Edit the paths to the <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> library on your local machine.</p> <div class="admonition caution"> -<p class="first admonition-title">Caution</p> +<p class="admonition-title">Caution</p> <p>This can vary from system to system. It is suggested to use a command like</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># for the ECCODES_INCLUDE_DIR path do:</span> @@ -422,7 +414,7 @@ $ dpkg -L libeccodes-dev <span class="p">|</span> grep eccodes.mod $ dpkg -L libeccodes-dev <span class="p">|</span> grep libeccodes.so </pre></div> </div> -<p class="last">to find out the path to the <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> library.</p> +<p>to find out the path to the <code class="docutils literal notranslate"><span class="pre">eccodes</span></code> library.</p> </div> <p>Substitute these paths in the <code class="docutils literal notranslate"><span class="pre">makefile</span></code> for parameters <strong>ECCODES_INCLUDE_DIR</strong> and <strong>ECCODES_LIB</strong> and save it.</p> @@ -431,7 +423,7 @@ and <strong>ECCODES_LIB</strong> and save it.</p> <span class="nv">ECCODES_LIB</span><span class="o">=</span> -L/usr/lib -leccodes_f90 -leccodes -lm </pre></div> </div> -<p>The Fortran program called <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> will be compiled during the +<p>The Fortran program called <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> will be compiled during the installation process.Therefore the name of the <code class="docutils literal notranslate"><span class="pre">makefile</span></code> to be used needs to be given in <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code>.</p> <p>In the root directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>, open the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script and adapt the installation parameters in the section labelled with @@ -445,7 +437,7 @@ and adapt the installation parameters in the section labelled with <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETER</span> <span class="c1">#</span> <span class="nv">TARGET</span><span class="o">=</span><span class="s1">'local'</span> -<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile.local.gfortran'</span> +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_fast'</span> <span class="nv">ECUID</span><span class="o">=</span>None <span class="nv">ECGID</span><span class="o">=</span>None <span class="nv">GATEWAY</span><span class="o">=</span>None @@ -463,20 +455,21 @@ and adapt the installation parameters in the section labelled with </div> <p>to start the installation. You should see the following standard output.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Output of setup.sh</span> -WARNING: installdir has not been specified -flex_extract will be installed in here by compiling the Fortran <span class="nb">source</span> in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/source/fortran -Install flex_extract_v7.1 software at <span class="nb">local</span> in directory /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1 - -Using makefile: Makefile.local.gfortran -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp phgrreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp grphreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp ftrafo.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 rwGRIB2.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 posnam.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 preconvert.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -O3 -O3 -fopenmp -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/gcc-4.9.3/grib_api-1.14.3/lib -Bstatic -lgrib_api_f77 -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper -lemosR64 - --rwxrwxr-x. <span class="m">1</span> philipa8 tmc <span class="m">282992</span> May <span class="m">23</span> <span class="m">22</span>:27 ./CONVERT2 + WARNING: installdir has not been specified + flex_extract will be installed in here by compiling the Fortran <span class="nb">source</span> in <path-to-flex_extract>/flex_extract_v7.1/Source/Fortran + Install flex_extract_v7.1 software at <span class="nb">local</span> in directory <path-to-flex_extract>/flex_extract_v7.1 + + Using makefile: makefile_fast + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./rwgrib2.f90 + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./phgrreal.f90 + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./grphreal.f90 + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./ftrafo.f90 + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./calc_etadot.f90 + gfortran -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march<span class="o">=</span>native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + + lrwxrwxrwx. <span class="m">1</span> <username> tmc <span class="m">20</span> <span class="m">15</span>. Mär <span class="m">13</span>:31 ./calc_etadot -> calc_etadot_fast.out </pre></div> </div> </div> @@ -502,7 +495,7 @@ gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed- <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Installation/remote.html b/Documentation/html/Installation/remote.html index 535078904cab55f7c1ca5ba4cdabbd6a65a44120..10d265e38743a51953d3970a9debf7b36f83b0f8 100644 --- a/Documentation/html/Installation/remote.html +++ b/Documentation/html/Installation/remote.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -191,27 +191,27 @@ <div class="section" id="remote-mode-dependencies"> <span id="ref-req-remote"></span><span id="ref-remote-mode"></span><h2>Remote mode - dependencies<a class="headerlink" href="#remote-mode-dependencies" title="Permalink to this headline">¶</a></h2> <p>The following software is required, and already available at the ECMWF servers:</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="61%" /> -<col width="39%" /> +<col style="width: 61%" /> +<col style="width: 39%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td>Python part</td> -<td>Fortran part</td> +<tbody> +<tr class="row-odd"><td><p>Python part</p></td> +<td><p>Fortran part</p></td> </tr> -<tr class="row-even"><td><ul class="first last simple"> -<li><a class="reference external" href="https://www.python.org/downloads/">Python3</a></li> -<li><a class="reference external" href="http://www.numpy.org/">numpy</a></li> -<li><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></li> -<li><a class="reference external" href="https://packages.debian.org/sid/python3-eccodes">eccodes for python</a></li> +<tr class="row-even"><td><ul class="simple"> +<li><p><a class="reference external" href="https://www.python.org/downloads/">Python3</a></p></li> +<li><p><a class="reference external" href="http://www.numpy.org/">numpy</a></p></li> +<li><p><a class="reference external" href="https://genshi.edgewall.org/">genshi</a></p></li> +<li><p><a class="reference external" href="https://packages.debian.org/sid/python3-eccodes">eccodes for python</a></p></li> </ul> </td> -<td><ul class="first last simple"> -<li><a class="reference external" href="https://gcc.gnu.org/wiki/GFortran">gfortran</a></li> -<li><a class="reference external" href="http://www.fftw.org">fftw3</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">eccodes</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">emoslib</a></li> +<td><ul class="simple"> +<li><p><a class="reference external" href="https://gcc.gnu.org/wiki/GFortran">gfortran</a></p></li> +<li><p><a class="reference external" href="http://www.fftw.org">fftw3</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">eccodes</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">emoslib</a></p></li> </ul> </td> </tr> @@ -229,8 +229,7 @@ Substitute <em><ecuid></em> with your ECMWF user name:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ssh -X <ecuid>@ecaccess.ecmwf.int </pre></div> </div> -<p>This will lead to the following output on the command line, asking for your -password:</p> +<p>This will lead to the following output on the command line, asking for your password:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Authorized access only. *************************************************************** @@ -263,29 +262,29 @@ tar xvf flex_extract_vX.X.tar.gz </div> <p>Execute the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> script from the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>’s root directory. Before executing it, it is necessary to adapt some parameters from <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> -described in <span class="xref std std-doc">Documentation/Input/setup</span>.</p> -<p>Open <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> with your preferred editor (e.g., <a href="#id1"><span class="problematic" id="id2">``</span></a>nano’‘) and adapt the values:</p> -<table border="1" class="docutils"> +described in <a class="reference internal" href="../Documentation/Input/setup.html"><span class="doc">The Installation Script - setup.sh</span></a>.</p> +<p>Open <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> with your preferred editor (e.g., nano) and adapt the values:</p> +<table class="docutils align-default"> <colgroup> -<col width="50%" /> -<col width="50%" /> +<col style="width: 50%" /> +<col style="width: 50%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td>Use this for target = <strong>ectrans</strong></td> -<td>Use this for target = <strong>cca</strong></td> +<tbody> +<tr class="row-odd"><td><p>Use this for target = <strong>ectrans</strong></p></td> +<td><p>Use this for target = <strong>cca</strong> or <strong>ccb</strong></p></td> </tr> -<tr class="row-even"><td><div class="first last highlight-bash notranslate"><div class="highlight"><pre><span></span>... +<tr class="row-even"><td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>... <span class="c1"># -----------------------------------------</span> <span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> <span class="c1">#</span> <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETER</span> <span class="c1">#</span> <span class="nv">TARGET</span><span class="o">=</span><span class="s1">'ecgate'</span> -<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'Makefile.gfortran'</span> -<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'uid'</span> -<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'gid'</span> -<span class="nv">GATEWAY</span><span class="o">=</span>None -<span class="nv">DESTINATION</span><span class="o">=</span>None +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_ecgate'</span> +<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'<username>'</span> +<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'<groupID>'</span> +<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'<gatewayname>'</span> +<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'<username>@genericSftp'</span> <span class="nv">INSTALLDIR</span><span class="o">=</span>None <span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">'job.template'</span> <span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> @@ -293,18 +292,18 @@ described in <span class="xref std std-doc">Documentation/Input/setup</span>.</p </pre></div> </div> </td> -<td><div class="first last highlight-bash notranslate"><div class="highlight"><pre><span></span>... +<td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>... <span class="c1"># -----------------------------------------</span> <span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> <span class="c1">#</span> <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETER</span> <span class="c1">#</span> <span class="nv">TARGET</span><span class="o">=</span><span class="s1">'cca'</span> -<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'Makefile.CRAY'</span> -<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'uid'</span> -<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'gid'</span> -<span class="nv">GATEWAY</span><span class="o">=</span>None -<span class="nv">DESTINATION</span><span class="o">=</span>None +<span class="nv">MAKEFILE</span><span class="o">=</span><span class="s1">'makefile_cray'</span> +<span class="nv">ECUID</span><span class="o">=</span><span class="s1">'<username>'</span> +<span class="nv">ECGID</span><span class="o">=</span><span class="s1">'<groupID>'</span> +<span class="nv">GATEWAY</span><span class="o">=</span><span class="s1">'<gatewayname>'</span> +<span class="nv">DESTINATION</span><span class="o">=</span><span class="s1">'<username>@genericSftp'</span> <span class="nv">INSTALLDIR</span><span class="o">=</span><span class="s1">''</span> <span class="nv">JOB_TEMPLATE</span><span class="o">=</span><span class="s1">'job.template'</span> <span class="nv">CONTROLFILE</span><span class="o">=</span><span class="s1">'CONTROL_EA5'</span> @@ -318,8 +317,8 @@ described in <span class="xref std std-doc">Documentation/Input/setup</span>.</p <p><span class="underline">Please substitute the values of ECUID and ECGID with your own ones (look at any of your files with ``ls -l’’ to see uid and gid).</span></p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">If a local gateway server is available, files can be transferred with <code class="docutils literal notranslate"><span class="pre">ECaccess</span></code> commands. In that case, a valid <em>GATEWAY</em> and <em>DESTINATION</em> have to be present in the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> file (even if not used, the lines must not be deleted).</p> +<p class="admonition-title">Note</p> +<p>If a local gateway server is available, files can be transferred with <code class="docutils literal notranslate"><span class="pre">ECaccess</span></code> commands. In that case, a valid <em>GATEWAY</em> and <em>DESTINATION</em> have to be present in the <code class="docutils literal notranslate"><span class="pre">setup.sh</span></code> file (even if not used, the lines must not be deleted).</p> </div> <p>Afterwards, type:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>module load python3 @@ -333,15 +332,16 @@ Job compilation script has been submitted to ecgate <span class="k">for</span> i You should get an email with subject <span class="s2">"flexcompile"</span> within the next few minutes! </pre></div> </div> -<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a “SUCCESS” statement in the last line:</p> -<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp phgrreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp grphreal.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -g -O3 -fopenmp ftrafo.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 -gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert<span class="o">=</span>big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 --rwxr-x---. <span class="m">1</span> USER at <span class="m">353134</span> May <span class="m">23</span> <span class="m">12</span>:27 CONVERT2 +<p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a “SUCCESS” statement in the last line:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./rwgrib2.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./phgrreal.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./grphreal.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./ftrafo.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./calc_etadot.f90 +gfortran -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert<span class="o">=</span>big-endian -c ./posnam.f90 +gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march<span class="o">=</span>native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp +ln -sf calc_etadot_fast.out calc_etadot +lrwxrwxrwx. <span class="m">1</span> <username> at <span class="m">20</span> Mar <span class="m">8</span> <span class="m">14</span>:11 calc_etadot -> calc_etadot_fast.out SUCCESS! </pre></div> </div> @@ -368,7 +368,7 @@ SUCCESS! <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Support/faq.html b/Documentation/html/Support/faq.html index 9f4864f50dfb3feef76261f9fd3c55951dab08d6..9d3b481463f39ba041b8b440f34a2ce3b7f1f1a0 100644 --- a/Documentation/html/Support/faq.html +++ b/Documentation/html/Support/faq.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -172,7 +172,7 @@ <h1>FAQ - Frequently asked questions<a class="headerlink" href="#faq-frequently-asked-questions" title="Permalink to this headline">¶</a></h1> <div class="contents local topic" id="contents"> <ul class="simple"> -<li><a class="reference internal" href="#what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages" id="id1">What can I do if I can’t install the third party libraries from distribution packages?</a></li> +<li><p><a class="reference internal" href="#what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages" id="id1">What can I do if I can’t install the third party libraries from distribution packages?</a></p></li> </ul> </div> <div class="section" id="what-can-i-do-if-i-can-t-install-the-third-party-libraries-from-distribution-packages"> @@ -180,29 +180,28 @@ <p>This can be the case if the user does not have admin rights. It is possible to install the necessary libraries locally from source. For this case you should follow the following steps:</p> -<dl class="docutils"> -<dt>Installation hints:</dt> -<dd><ol class="first last arabic simple"> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">Read Emoslib installation instructions</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran">Read ECMWF blog about gfortran</a></li> -<li><a class="reference external" href="http://www.fftw.org">Install FFTW</a></li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">Install EMOSLIB</a> (2 times make! one without any options and one with single precision option)</li> -<li><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">Install ECCODES</a></li> -<li>Register at Mars (<a class="reference internal" href="../installation.html#ref-registration"><span class="std std-ref">Registration at ECMWF</span></a>)</li> -<li>Install Web API’s <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a> and <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a></li> -<li>Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs</li> -<li>Check available python packages (e.g. import eccodes / import grib_api / import ecmwfapi)</li> -<li>Start test retrieval (<a class="reference internal" href="../Installation/local.html#ref-test-local"><span class="std std-ref">Test local environment</span></a>)</li> -<li>Install <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> (<a class="reference internal" href="../installation.html"><span class="doc">Installation</span></a>)</li> +<dl class="simple"> +<dt>Installation hints:</dt><dd><ol class="arabic simple"> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">Read Emoslib installation instructions</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/SUP/2015/05/11/Building+ECMWF+software+with+gfortran">Read ECMWF blog about gfortran</a></p></li> +<li><p><a class="reference external" href="http://www.fftw.org">Install FFTW</a></p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/EMOS/Emoslib">Install EMOSLIB</a> (2 times make! one without any options and one with single precision option)</p></li> +<li><p><a class="reference external" href="https://software.ecmwf.int/wiki/display/ECC">Install ECCODES</a></p></li> +<li><p>Register at Mars (<a class="reference internal" href="../installation.html#ref-registration"><span class="std std-ref">Registration at ECMWF</span></a>)</p></li> +<li><p>Install Web API’s <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a> and <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a></p></li> +<li><p>Check LD_LIBRARY_PATH environment variable if it contains all paths to the libs</p></li> +<li><p>Check available python packages (e.g. import eccodes / import grib_api / import ecmwfapi)</p></li> +<li><p>Start test retrieval (<a class="reference internal" href="../Installation/local.html#ref-test-local"><span class="std std-ref">Test local environment</span></a>)</p></li> +<li><p>Install <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> (<a class="reference internal" href="../installation.html"><span class="doc">Installation</span></a>)</p></li> </ol> </dd> </dl> <div class="admonition caution"> -<p class="first admonition-title">Caution</p> -<ul class="last simple"> -<li>use the same compiler and compiler version all the time</li> -<li>don’t forget to set all Library paths in the LD_LIBRARY_PATH environment variable</li> -<li>adapt the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> makefile</li> +<p class="admonition-title">Caution</p> +<ul class="simple"> +<li><p>use the same compiler and compiler version all the time</p></li> +<li><p>don’t forget to set all Library paths in the LD_LIBRARY_PATH environment variable</p></li> +<li><p>adapt the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> makefile</p></li> </ul> </div> <div class="toctree-wrapper compound"> @@ -230,7 +229,7 @@ For this case you should follow the following steps:</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/Support/known_bugs_issues.html b/Documentation/html/Support/known_bugs_issues.html index e227bfa393a70f1249e33beeff933537765fdfe5..61dac14e1d5e0788b0335531829b4e0c4302888f 100644 --- a/Documentation/html/Support/known_bugs_issues.html +++ b/Documentation/html/Support/known_bugs_issues.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -163,6 +163,27 @@ <div class="section" id="known-bugs-and-issues"> <h1>Known Bugs and Issues<a class="headerlink" href="#known-bugs-and-issues" title="Permalink to this headline">¶</a></h1> +<div class="section" id="release-v7-1"> +<h2>Release v7.1<a class="headerlink" href="#release-v7-1" title="Permalink to this headline">¶</a></h2> +<div class="section" id="cds-api-and-era5-data"> +<h3>CDS API and ERA5 data<a class="headerlink" href="#cds-api-and-era5-data" title="Permalink to this headline">¶</a></h3> +<blockquote> +<div><p>See ticket <a class="reference external" href="https://www.flexpart.eu/ticket/230">#230</a> on flexpart.eu for information.</p> +</div></blockquote> +</div> +<div class="section" id="installation-problems-with-gateway-and-destination-parameters"> +<h3>Installation problems with <code class="docutils literal notranslate"><span class="pre">GATEWAY</span></code> and <code class="docutils literal notranslate"><span class="pre">DESTINATION</span></code> parameters<a class="headerlink" href="#installation-problems-with-gateway-and-destination-parameters" title="Permalink to this headline">¶</a></h3> +<blockquote> +<div><p>See ticket <a class="reference external" href="https://www.flexpart.eu/ticket/263">#263</a> on flexpart.eu for information.</p> +</div></blockquote> +</div> +<div class="section" id="installation-problems-with-the-fortran-program-calc-etadot"> +<h3>Installation problems with the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code><a class="headerlink" href="#installation-problems-with-the-fortran-program-calc-etadot" title="Permalink to this headline">¶</a></h3> +<blockquote> +<div><p>See ticket <a class="reference external" href="https://www.flexpart.eu/ticket/264">#264</a> on flexpart.eu for information.</p> +</div></blockquote> +</div> +</div> </div> @@ -176,7 +197,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/ControlFile.html b/Documentation/html/_modules/ControlFile.html index 4b5f32637b244ad2bf9affc6982319575dfa047b..2affed2b09f3f4ab273bfddd601e3425157082f7 100644 --- a/Documentation/html/_modules/ControlFile.html +++ b/Documentation/html/_modules/ControlFile.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -196,7 +196,7 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> @@ -205,8 +205,8 @@ <span class="c1">#pylint: disable=wrong-import-position</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="n">my_error</span> -<span class="kn">from</span> <span class="nn">Mods.checks</span> <span class="k">import</span> <span class="p">(</span><span class="n">check_grid</span><span class="p">,</span> <span class="n">check_area</span><span class="p">,</span> <span class="n">check_levels</span><span class="p">,</span> <span class="n">check_purefc</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="n">my_error</span> +<span class="kn">from</span> <span class="nn">Mods.checks</span> <span class="kn">import</span> <span class="p">(</span><span class="n">check_grid</span><span class="p">,</span> <span class="n">check_area</span><span class="p">,</span> <span class="n">check_levels</span><span class="p">,</span> <span class="n">check_purefc</span><span class="p">,</span> <span class="n">check_step</span><span class="p">,</span> <span class="n">check_mail</span><span class="p">,</span> <span class="n">check_queue</span><span class="p">,</span> <span class="n">check_pathes</span><span class="p">,</span> <span class="n">check_dates</span><span class="p">,</span> <span class="n">check_maxstep</span><span class="p">,</span> <span class="n">check_type</span><span class="p">,</span> <span class="n">check_request</span><span class="p">,</span> <span class="n">check_basetime</span><span class="p">,</span> <span class="n">check_public</span><span class="p">,</span> <span class="n">check_acctype</span><span class="p">,</span> @@ -494,7 +494,7 @@ <span class="sd"> 'ectrans', 'debug', 'request', 'public', 'purefc', 'rrint', 'doubleelda']</span> <span class="sd"> '''</span> - <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> <span class="sd">'''Initialises the instance of ControlFile class and defines</span> <span class="sd"> all class attributes with default values. Afterwards calls</span> <span class="sd"> function __read_controlfile__ to read parameter from Control file.</span> @@ -655,7 +655,7 @@ <span class="k">return</span> - <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''Prepares a string which have all the ControlFile class attributes</span> <span class="sd"> with its associated values. Each attribute is printed in one line and</span> <span class="sd"> in alphabetical order.</span> @@ -864,7 +864,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/EcFlexpart.html b/Documentation/html/_modules/EcFlexpart.html index a7d385c4385070bd5f29b39b9d514bb0ec525df6..c3fb4881b5f73dfde24b4fbbc7462c68ed4df2d1 100644 --- a/Documentation/html/_modules/EcFlexpart.html +++ b/Documentation/html/_modules/EcFlexpart.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -221,25 +221,25 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="nn">shutil</span> -<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="c1">#pylint: disable=wrong-import-position</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Classes.GribUtil</span> <span class="k">import</span> <span class="n">GribUtil</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">init128</span><span class="p">,</span> <span class="n">to_param_id</span><span class="p">,</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">Classes.GribUtil</span> <span class="kn">import</span> <span class="n">GribUtil</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">init128</span><span class="p">,</span> <span class="n">to_param_id</span><span class="p">,</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">get_informations</span><span class="p">,</span> <span class="n">get_dimensions</span><span class="p">,</span> <span class="n">execute_subprocess</span><span class="p">,</span> <span class="n">to_param_id_with_tablenumber</span><span class="p">,</span> <span class="n">generate_retrieval_period_boundary</span><span class="p">)</span> -<span class="kn">from</span> <span class="nn">Classes.MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> -<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> +<span class="kn">from</span> <span class="nn">Classes.MarsRetrieval</span> <span class="kn">import</span> <span class="n">MarsRetrieval</span> +<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="kn">import</span> <span class="n">UioFiles</span> <span class="kn">import</span> <span class="nn">Mods.disaggregation</span> <span class="k">as</span> <span class="nn">disaggregation</span> <span class="c1">#pylint: enable=wrong-import-position</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -356,7 +356,7 @@ <span class="c1"># --------------------------------------------------------------------------</span> <span class="c1"># CLASS FUNCTIONS</span> <span class="c1"># --------------------------------------------------------------------------</span> - <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">fluxes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> <span class="sd">'''Creates an object/instance of EcFlexpart with the associated</span> <span class="sd"> settings of its attributes for the retrieval.</span> @@ -747,7 +747,7 @@ <span class="sd"> index_vals[1]: ('0', '1200', '1800', '600') ; time</span> <span class="sd"> index_vals[2]: ('0', '12', '3', '6', '9') ; stepRange</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="n">codes_index_get</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="n">codes_index_get</span> <span class="n">iid</span> <span class="o">=</span> <span class="kc">None</span> <span class="n">index_keys</span> <span class="o">=</span> <span class="n">keys</span> @@ -1011,9 +1011,9 @@ <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> - <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> <span class="k">try</span><span class="p">:</span> @@ -1099,7 +1099,7 @@ <span class="sd"> '''</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_get_values</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> <span class="n">codes_index_release</span><span class="p">)</span> @@ -1677,7 +1677,7 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_index_select</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_get_values</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_new_from_index</span><span class="p">,</span> <span class="n">codes_index_release</span><span class="p">)</span> @@ -1957,7 +1957,7 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get_array</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get_array</span><span class="p">,</span> <span class="n">codes_set_array</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">)</span> @@ -2087,7 +2087,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/GribUtil.html b/Documentation/html/_modules/GribUtil.html index e1fc92c08ed39c34700f270259c4e80e539ff302..446c248db1966a67cc232add7ce1c28ba8d13edc 100644 --- a/Documentation/html/_modules/GribUtil.html +++ b/Documentation/html/_modules/GribUtil.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -188,7 +188,7 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> @@ -211,7 +211,7 @@ <span class="c1"># --------------------------------------------------------------------------</span> <span class="c1"># CLASS FUNCTIONS</span> <span class="c1"># --------------------------------------------------------------------------</span> - <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filenames</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filenames</span><span class="p">):</span> <span class="sd">'''Initialise an object of GribUtil and assign a list of filenames.</span> <span class="sd"> Parameters</span> @@ -249,7 +249,7 @@ <span class="sd"> return_list : :obj:`list` of :obj:`string`</span> <span class="sd"> List of keyvalues for given keynames.</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">)</span> <span class="n">return_list</span> <span class="o">=</span> <span class="p">[]</span> @@ -315,7 +315,7 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_set</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">,</span> <span class="n">codes_set_values</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">)</span> @@ -384,7 +384,7 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_is_defined</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span><span class="p">,</span> <span class="n">codes_write</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keynames</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">keyvalues</span><span class="p">):</span> @@ -445,7 +445,7 @@ <span class="sd"> iid: :obj:`integer`</span> <span class="sd"> Grib index id.</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="p">(</span><span class="n">codes_index_read</span><span class="p">,</span> <span class="n">codes_index_new_from_file</span><span class="p">,</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="p">(</span><span class="n">codes_index_read</span><span class="p">,</span> <span class="n">codes_index_new_from_file</span><span class="p">,</span> <span class="n">codes_index_add_file</span><span class="p">,</span> <span class="n">codes_index_write</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"... index will be done"</span><span class="p">)</span> @@ -480,7 +480,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/MarsRetrieval.html b/Documentation/html/_modules/MarsRetrieval.html index 5bc24a5b0c996f7f68308d3c6f28c67e463c7ed7..77cc971eceb9ad44cbb0756cd2d8f0e7eb088b81 100644 --- a/Documentation/html/_modules/MarsRetrieval.html +++ b/Documentation/html/_modules/MarsRetrieval.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -195,7 +195,7 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> @@ -311,7 +311,7 @@ <span class="sd"> Specifies the meteorological parameter.</span> <span class="sd"> '''</span> - <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">marsclass</span><span class="o">=</span><span class="s2">"EA"</span><span class="p">,</span> <span class="n">dataset</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">marsclass</span><span class="o">=</span><span class="s2">"EA"</span><span class="p">,</span> <span class="n">dataset</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">levtype</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">levelist</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">repres</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">date</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">resol</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">area</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">time</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">expver</span><span class="o">=</span><span class="s2">"1"</span><span class="p">,</span> <span class="n">number</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">accuracy</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">grid</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">gaussian</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> @@ -712,7 +712,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/UioFiles.html b/Documentation/html/_modules/UioFiles.html index d939348aa9c2185bad0205d0069e05c539a0df40..a0fc159601408fd858ff63ae99d115afd6300b20 100644 --- a/Documentation/html/_modules/UioFiles.html +++ b/Documentation/html/_modules/UioFiles.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -205,7 +205,7 @@ <span class="c1"># software specific modules from flex_extract</span> <span class="c1">#pylint: disable=wrong-import-position</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'../'</span><span class="p">)</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">get_list_as_string</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">get_list_as_string</span> <span class="c1">#pylint: enable=wrong-import-position</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -233,7 +233,7 @@ <span class="c1"># --------------------------------------------------------------------------</span> <span class="c1"># CLASS METHODS</span> <span class="c1"># --------------------------------------------------------------------------</span> - <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> <span class="sd">"""Assignes a specific pattern for these files.</span> <span class="sd"> Parameters</span> @@ -283,7 +283,7 @@ <span class="k">return</span> - <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Converts the list of files into a single string.</span> <span class="sd"> The entries are sepereated by "," sign.</span> @@ -329,7 +329,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/checks.html b/Documentation/html/_modules/checks.html index e38379b8748852fbd9316888957cc807b59d877c..7faf2c558d2b1664169acfa6da89b2fd9ff3a770 100644 --- a/Documentation/html/_modules/checks.html +++ b/Documentation/html/_modules/checks.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -187,10 +187,10 @@ <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> -<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span> <span class="c1"># pylint: disable=unused-import</span> <span class="k">try</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">exceptions</span> @@ -200,7 +200,7 @@ <span class="c1"># software specific classes and modules from flex_extract</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">silent_remove</span> +<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> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># FUNCTIONS</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -640,12 +640,17 @@ <span class="sd"> '''</span> <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> \ - <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="ow">or</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> - <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Environment variables GATEWAY, DESTINATION, ECUID '</span> + <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> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Environment variables ECUID '</span> <span class="s1">'and ECGID were not set properly! </span><span class="se">\n</span><span class="s1"> '</span> <span class="s1">'Please check for existence of file "ECMWF_ENV" '</span> <span class="s1">'in the run directory!'</span><span class="p">)</span> + <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> \ + <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> + <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Parameters GATEWAY and DESTINATION were '</span> + <span class="s1">'not properly set for working on ECMWF server. </span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'There will be no transfer of output files to the '</span> + <span class="s1">'local gateway server possible!'</span><span class="p">)</span> <span class="k">return</span></div> <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> @@ -1054,7 +1059,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/disaggregation.html b/Documentation/html/_modules/disaggregation.html index 929f61d296eadcea506dee6b0df9b8342e76a94d..a89c057951e8813880cf0084e36346a7bdeb56aa 100644 --- a/Documentation/html/_modules/disaggregation.html +++ b/Documentation/html/_modules/disaggregation.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -590,7 +590,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/get_mars_data.html b/Documentation/html/_modules/get_mars_data.html index a2048c2f3d05e6f8c58d754802522a58102cde81..ac1f2208a4bc39ff2ef42f26d8f4f8b004c6da67 100644 --- a/Documentation/html/_modules/get_mars_data.html +++ b/Documentation/html/_modules/get_mars_data.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -220,12 +220,12 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">inspect</span> -<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="c1"># add path to local main python path for flex_extract to get full access</span> @@ -233,10 +233,10 @@ <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> <span class="c1"># pylint: disable=wrong-import-position</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> -<span class="kn">from</span> <span class="nn">Classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> -<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> -<span class="kn">from</span> <span class="nn">Classes.MarsRetrieval</span> <span class="k">import</span> <span class="n">MarsRetrieval</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">my_error</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">)</span> +<span class="kn">from</span> <span class="nn">Classes.EcFlexpart</span> <span class="kn">import</span> <span class="n">EcFlexpart</span> +<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="kn">import</span> <span class="n">UioFiles</span> +<span class="kn">from</span> <span class="nn">Classes.MarsRetrieval</span> <span class="kn">import</span> <span class="n">MarsRetrieval</span> <span class="c1"># pylint: enable=wrong-import-position</span> <span class="c1"># pylint: disable=invalid-name</span> <span class="k">try</span><span class="p">:</span> @@ -566,7 +566,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/index.html b/Documentation/html/_modules/index.html index bc3708af02ea2551774fa33e497b77dff2108823..f833113de9e7708bdd5f9e676bdd05f6de9ee51c 100644 --- a/Documentation/html/_modules/index.html +++ b/Documentation/html/_modules/index.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -182,7 +182,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/install.html b/Documentation/html/_modules/install.html index 51c77e440f0ebb32929a284d384b0621b8551477..0431bc32afc585cde9a0e70c82ae91e31d86c8b3 100644 --- a/Documentation/html/_modules/install.html +++ b/Documentation/html/_modules/install.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -225,19 +225,19 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="nn">tarfile</span> -<span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> +<span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> -<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">Classes.ControlFile</span> <span class="kn">import</span> <span class="n">ControlFile</span> +<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="kn">import</span> <span class="n">UioFiles</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span> <span class="n">silent_remove</span><span class="p">,</span> <span class="n">execute_subprocess</span><span class="p">,</span> <span class="n">none_or_str</span><span class="p">)</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -446,19 +446,19 @@ <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">!=</span> <span class="s1">'local'</span><span class="p">:</span> - <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span> <span class="ow">or</span> \ - <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id as well '</span> <span class="o">+</span> - <span class="s1">'as the </span><span class="se">\n</span><span class="s1">name of the local gateway and the ectrans '</span> <span class="o">+</span> - <span class="s1">'destination '</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'with command line options --ecuid --ecgid </span><span class="se">\</span> -<span class="s1"> --gateway --destination'</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Please enter your ECMWF user id and group id '</span> + <span class="s1">' with command line options --ecuid --ecgid'</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Try "'</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \ <span class="s1">' -h" to print usage information'</span><span class="p">)</span> - <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user </span><span class="se">\</span> -<span class="s1"> support for further details'</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'Please consult ecaccess documentation or ECMWF user '</span> + <span class="s1">'support for further details.</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> - + <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: Parameters GATEWAY and DESTINATION were '</span> + <span class="s1">'not properly set for working on ECMWF server. </span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'There will be no transfer of output files to the '</span> + <span class="s1">'local gateway server possible!'</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">:</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="s1">'$</span><span class="si">{HOME}</span><span class="s1">'</span> <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span> @@ -612,9 +612,9 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> - <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span> <span class="k">try</span><span class="p">:</span> <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> @@ -675,9 +675,9 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> - <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span> <span class="k">if</span> <span class="n">fp_root</span> <span class="o">==</span> <span class="s1">'../'</span><span class="p">:</span> <span class="n">fp_root</span> <span class="o">=</span> <span class="s1">'$HOME'</span> @@ -743,9 +743,9 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> - <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span> <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fp_root</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span> @@ -878,7 +878,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/prepare_flexpart.html b/Documentation/html/_modules/prepare_flexpart.html index 7dcd113a10543ef2369ec0eb6380be119996e3e3..5129ebe57980913eec747a1292eb196208a8677f 100644 --- a/Documentation/html/_modules/prepare_flexpart.html +++ b/Documentation/html/_modules/prepare_flexpart.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -225,7 +225,7 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="nn">os</span> @@ -238,11 +238,11 @@ <span class="n">inspect</span><span class="o">.</span><span class="n">getfile</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">())))</span> <span class="o">+</span> <span class="s1">'/../'</span><span class="p">)</span> <span class="c1"># pylint: disable=wrong-import-position</span> <span class="c1">#import _config</span> -<span class="kn">from</span> <span class="nn">Mods.checks</span> <span class="k">import</span> <span class="n">check_ppid</span> -<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="k">import</span> <span class="n">UioFiles</span> +<span class="kn">from</span> <span class="nn">Mods.checks</span> <span class="kn">import</span> <span class="n">check_ppid</span> +<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="kn">import</span> <span class="n">UioFiles</span> <span class="c1">#from Classes.ControlFile import ControlFile</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">)</span> -<span class="kn">from</span> <span class="nn">Classes.EcFlexpart</span> <span class="k">import</span> <span class="n">EcFlexpart</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">clean_up</span><span class="p">,</span> <span class="n">make_dir</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">)</span> +<span class="kn">from</span> <span class="nn">Classes.EcFlexpart</span> <span class="kn">import</span> <span class="n">EcFlexpart</span> <span class="c1"># pylint: enable=wrong-import-position</span> <span class="c1"># ------------------------------------------------------------------------------</span> @@ -357,7 +357,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/submit.html b/Documentation/html/_modules/submit.html index 2d7a571f8d14107037b409919ff3ec441d6ebd7e..20230472e5004435c5482316df32420e004e8b16 100644 --- a/Documentation/html/_modules/submit.html +++ b/Documentation/html/_modules/submit.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -221,18 +221,18 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> -<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> <span class="c1"># software specific classes and modules from flex_extract</span> <span class="kn">import</span> <span class="nn">_config</span> -<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="k">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> +<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">setup_controldata</span><span class="p">,</span> <span class="n">normal_exit</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">)</span> -<span class="kn">from</span> <span class="nn">Mods.get_mars_data</span> <span class="k">import</span> <span class="n">get_mars_data</span> -<span class="kn">from</span> <span class="nn">Mods.prepare_flexpart</span> <span class="k">import</span> <span class="n">prepare_flexpart</span> +<span class="kn">from</span> <span class="nn">Mods.get_mars_data</span> <span class="kn">import</span> <span class="n">get_mars_data</span> +<span class="kn">from</span> <span class="nn">Mods.prepare_flexpart</span> <span class="kn">import</span> <span class="n">prepare_flexpart</span> <span class="c1">#from Classes.ControlFile import ControlFile</span> @@ -391,9 +391,9 @@ <span class="sd"> ------</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="k">import</span> <span class="n">NewTextTemplate</span> - <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="k">import</span> <span class="n">TemplateLoader</span> - <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="k">import</span> <span class="n">UndefinedError</span> + <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span> + <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span> <span class="n">TemplateLoader</span> + <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span> <span class="c1"># load template and insert control content as list</span> <span class="k">try</span><span class="p">:</span> @@ -439,7 +439,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_modules/tools.html b/Documentation/html/_modules/tools.html index b28f7ca9120bb290e164a27229e8199270e01ee2..d2a77b6439c435c6c0dc44e24485c2dd264f72cb 100644 --- a/Documentation/html/_modules/tools.html +++ b/Documentation/html/_modules/tools.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <script type="text/javascript" src="../_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="../_static/jquery.js"></script> + <script src="../_static/underscore.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="../_static/js/theme.js"></script> @@ -222,7 +222,7 @@ <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># MODULES</span> <span class="c1"># ------------------------------------------------------------------------------</span> -<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">errno</span> @@ -236,8 +236,8 @@ <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">builtins</span> <span class="k">as</span> <span class="nn">exceptions</span> <span class="c1"># pylint: enable=unused-import</span> -<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> -<span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> +<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span> +<span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span> <span class="c1"># ------------------------------------------------------------------------------</span> <span class="c1"># METHODS</span> @@ -266,7 +266,7 @@ <span class="sd"> Name of the job template file for submission to ECMWF server.</span> <span class="sd"> '''</span> <span class="kn">import</span> <span class="nn">_config</span> - <span class="kn">from</span> <span class="nn">Classes.ControlFile</span> <span class="k">import</span> <span class="n">ControlFile</span> + <span class="kn">from</span> <span class="nn">Classes.ControlFile</span> <span class="kn">import</span> <span class="n">ControlFile</span> <span class="n">args</span> <span class="o">=</span> <span class="n">get_cmdline_args</span><span class="p">()</span> <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span> @@ -924,7 +924,7 @@ <span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> <span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> <span class="sd"> '''</span> - <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span> + <span class="kn">from</span> <span class="nn">eccodes</span> <span class="kn">import</span> <span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span> @@ -1084,7 +1084,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/_sources/Developers/gen_docu.rst.txt b/Documentation/html/_sources/Developers/gen_docu.rst.txt index 77a2b8f769a20fff640f685ec606ef60c545236a..dd4959cb4ff22c336e2049f41d465054a1bf4d80 100644 --- a/Documentation/html/_sources/Developers/gen_docu.rst.txt +++ b/Documentation/html/_sources/Developers/gen_docu.rst.txt @@ -9,18 +9,20 @@ Additional Software Developers working on ``flex_extract`` should make extensive use of the prepared test cases, unit tests and update the documentation. For this, some additional software is necessary: -- pylint -- pytest -- mock -- graphviz -- sphinx -- pip install sphinxcontrib-exceltable -- pip install seqdiag -- pip install sphinxcontrib-seqdiag -- pip install sphinxcontrib-blockdiag -- pip install pycallgraph +.. code-block:: sh + + pip install pylint + pip install pytest + pip install mock + pip install graphviz + pip install sphinx + pip install sphinxcontrib-exceltable + pip install seqdiag + pip install sphinxcontrib-seqdiag + pip install sphinxcontrib-blockdiag + pip install pycallgraph + -#- pip install sphinx-fortran @@ -30,7 +32,7 @@ Online-documentation with Sphinx Use the scriot ``gen_docu.sh`` to generate an update of the online documentation of the python component. It uses ``pyreverse`` to generate a class and a package diagram with graphviz and overwrites the old files in the developers directory. -``pyreverse`` creates ``dot`` files and with the ``dot`` program of the ``graphviz`` software the ``png`` files are created. Everything happens in the Python source directory before moving them finally to the ``for_developers`` directory. The Sphinx source code has a ``_files`` directory which contains links to these ``png`` files and therefore they should not be renamed. +``pyreverse`` creates ``dot`` files and with the ``dot`` program of the ``graphviz`` software the ``png`` files are created. Everything happens in the Python source directory before moving them finally to the ``For_developers`` directory. The Sphinx source code has a ``_files`` directory which contains links to these ``png`` files and therefore they should not be renamed. Sequence diagramms diff --git a/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt b/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt index 2f5aec46671804b89d2a856c481bd4fd70cd9bad..9c7c3000a35657801bc7de9b7f1cb51c4d5bb999 100644 --- a/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/compilejob.rst.txt @@ -73,7 +73,7 @@ Example ``compilejob.ksh`` module load eccodes/2.12.0 module load emos/455-r64 export FLEXPART_ROOT_SCRIPTS=${HOME} - export MAKEFILE=Makefile.gfortran + export MAKEFILE=makefile_ecgate ;; *cca*) module unload python @@ -87,18 +87,18 @@ Example ``compilejob.ksh`` export GROUP=`echo ${HOME} | awk -F / '{print $4}'` export SCRATCH=/scratch/ms/${GROUP}/${USER} export FLEXPART_ROOT_SCRIPTS=${HOME} - export MAKEFILE=Makefile.gfortran + export MAKEFILE=makefile_ecgate ;; esac mkdir -p ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION} cd ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION} # if FLEXPART_ROOT is not set this means cd to the home directory tar -xvf ${HOME}/flex_extract_v${VERSION}.tar - cd source/fortran - \rm *.o *.mod CONVERT2 + cd Source/Fortran + \rm *.o *.mod calc_etadot make -f ${MAKEFILE} >flexcompile 2>flexcompile - ls -l CONVERT2 >>flexcompile + ls -l calc_etadot >>flexcompile if [ $? -eq 0 ]; then echo 'SUCCESS!' >>flexcompile mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile diff --git a/Documentation/html/_sources/Documentation/Input/control.rst.txt b/Documentation/html/_sources/Documentation/Input/control.rst.txt index cb9e500e744e6774e4d4a01b6d7691d3e32bf849..fb770de664ca9a11a62bc68d4b912119711d4817 100644 --- a/Documentation/html/_sources/Documentation/Input/control.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/control.rst.txt @@ -33,7 +33,7 @@ must be listed in the :literal:`CONTROL` files. Example CONTROL files -------------------------------- -A number of example files can be found in the directory :literal:`flex_extract_vX.X/run/control/`. +A number of example files can be found in the directory :literal:`flex_extract_vX.X/Run/Control/`. They can be used as a template for adaptations and understand what's possible to retrieve from ECMWF's archive. For each main dataset there is an example and additionally some variances in resolution, type of field or type of retrieving the vertical coordinate. diff --git a/Documentation/html/_sources/Documentation/Input/control_params.rst.txt b/Documentation/html/_sources/Documentation/Input/control_params.rst.txt index a1ed5b238253b9f2be9c535d0e5b842eb400cdc4..d505c9871963f4773e523aa8e1125e98c789304a 100644 --- a/Documentation/html/_sources/Documentation/Input/control_params.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/control_params.rst.txt @@ -3,6 +3,7 @@ The CONTROL parameters ====================== + .. _ref-control-user: diff --git a/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt b/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt index a3232e2c5b7ac760975aba87152fede088e921c5..057136caee885f01651f2490160f433584883fba 100644 --- a/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/ecmwf_env.rst.txt @@ -2,13 +2,13 @@ ECMWF User Credential file ``ECMWF_ENV`` **************************************** -This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the ``flex_extract_vX.X/run`` directory and will be created in the installation process for the application modes **remote** and **gateway**. +This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the ``flex_extract_vX.X/Run`` directory and will be created in the installation process for the application modes **remote** and **gateway**. This file is based on the template ``ECMWF_ENV.template`` which is located in the ``templates`` directory. .. note:: - In the **local** mode it is not present. + In the **local** mode this file is not present. diff --git a/Documentation/html/_sources/Documentation/Input/examples.rst.txt b/Documentation/html/_sources/Documentation/Input/examples.rst.txt index 839b648c1abb72d8f4cea83291faeba1c05a30da..c61b1a54076329f417b4ebc258b2dbf899db2ff1 100644 --- a/Documentation/html/_sources/Documentation/Input/examples.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/examples.rst.txt @@ -2,36 +2,38 @@ CONTROL file examples ********************** -``Flex_extract`` has a couple of example ``CONTROL`` files for a number of different data set constellations in the directory path ``flex_extract_vX.X/run/control``. +``Flex_extract`` has a couple of example ``CONTROL`` files for a number of different data set constellations in the directory path ``flex_extract_vX.X/Run/Control``. Here is a list of the example files and a description of the data set: CONTROL.documentation This file is not intended to be used with ``flex_extract``. It has a list of all possible parameters and their default values for a quick overview. -CONTROL_CERA -CONTROL_CERA.global -CONTROL_CERA.public -CONTROL_EA5 -CONTROL_EA5.global -CONTROL_EA5.public -CONTROL_EI -CONTROL_EI.global -CONTROL_EI.public -CONTROL_OD.ELDA.FC.eta.ens.double -CONTROL_OD.ENFO.CF -CONTROL_OD.ENFO.CV -CONTROL_OD.ENFO.PF -CONTROL_OD.ENFO.PF.36hours -CONTROL_OD.ENFO.PF.ens -CONTROL_OD.OPER.4V.operational -CONTROL_OD.OPER.FC.36hours -CONTROL_OD.OPER.FC.eta.global -CONTROL_OD.OPER.FC.eta.highres -CONTROL_OD.OPER.FC.gauss.highres -CONTROL_OD.OPER.FC.operational -CONTROL_OD.OPER.FC.twiceaday.1hourly -CONTROL_OD.OPER.FC.twiceaday.3hourly +.. code-block:: bash + + CONTROL_CERA + CONTROL_CERA.global + CONTROL_CERA.public + CONTROL_EA5 + CONTROL_EA5.global + CONTROL_EA5.public + CONTROL_EI + CONTROL_EI.global + CONTROL_EI.public + CONTROL_OD.ELDA.FC.eta.ens.double + CONTROL_OD.ENFO.CF + CONTROL_OD.ENFO.CV + CONTROL_OD.ENFO.PF + CONTROL_OD.ENFO.PF.36hours + CONTROL_OD.ENFO.PF.ens + CONTROL_OD.OPER.4V.operational + CONTROL_OD.OPER.FC.36hours + CONTROL_OD.OPER.FC.eta.global + CONTROL_OD.OPER.FC.eta.highres + CONTROL_OD.OPER.FC.gauss.highres + CONTROL_OD.OPER.FC.operational + CONTROL_OD.OPER.FC.twiceaday.1hourly + CONTROL_OD.OPER.FC.twiceaday.3hourly .. toctree:: diff --git a/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt b/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt index 894655341eca5b4430f6d3f6ac267a060aae95bc..e176135d4d176861cf1c168a68953ada23851f47 100644 --- a/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/fortran_makefile.rst.txt @@ -1,37 +1,37 @@ -*********************************** -The Fortran Makefile - ``CONVERT2`` -*********************************** +************************************** +The Fortran Makefile - ``calc_etadot`` +************************************** .. _ref-convert: ``Flex_extract``'s Fortran program will be compiled during -the installation process to get the executable named ``CONVERT2``. +the installation process to get the executable named ``calc_etadot``. -``flex_extract`` has a couple of ``Makefiles`` prepared which can be found in the directory -``flex_extract_vX.X/source/fortran``, where ``vX.X`` should be substituted with the current version number. -A list of these ``Makefiles`` are shown below: +``Flex_extract`` has a couple of ``makefiles`` prepared which can be found in the directory +``flex_extract_vX.X/Source/Fortran``, where ``vX.X`` should be substituted with the current version number. +A list of these ``makefiles`` are shown below: | **Remote/Gateway mode**: | Files to be used as they are! - | **Makefile.gfortran** + | **makefile_ecgate** | For the use on ECMWF's server **ecgate**. - | **Makefile.CRAY** + | **makefile_cray** | For the use on ECMWF's server **cca/ccb**. | **Local mode** | It is necessary to adapt **ECCODES_INCLUDE_DIR** and **ECCODES_LIB** - | **Makefile.local.gfortran** - | For the use with gfortran compiler. + | **makefile_fast** + | For the use with gfortran compiler and optimization mode. - | **Makefile.local.ifort** - | For the use with ifort compiler. + | **makefile_debug** + | For the use with gfortran compiler in debugging mode. -For instructions on how to adapt the ``Makefiles`` for the local application mode +For instructions on how to adapt the ``makefiles`` for the local application mode please see :ref:`ref-install-local`. diff --git a/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt b/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt index 275295f59ce8bce13f60b41f36dbf17b2f128746..466c91f34ae0c36d5afbca74fdb276d37a6c8c0d 100644 --- a/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/jobscript.rst.txt @@ -4,8 +4,8 @@ The Jobscript ``job.ksh`` The jobscript is a Korn-shell script which will be created at runtime for each ``flex_extract`` execution in the application modes **remote** and **gateway**. -It is based on the ``job.temp`` template file which is stored in the ``templates`` directory. -This template is by itself generated in the installation process from a ``jobscript.template`` template file. +It is based on the ``job.temp`` template file which is stored in the ``Templates`` directory. +This template is by itself generated in the installation process from a ``job.template`` template file. ``Flex_extract`` uses the python package `genshi <https://genshi.edgewall.org/>`_ to generate the Korn-shell script from the template files by substituting the individual parameters. @@ -73,7 +73,7 @@ Example ``jobscript.ksh`` module load python3 module load eccodes/2.12.0 module load emos/455-r64 - export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + export PATH=${PATH}:${HOME}/flex_extract_v7.1/Source/Python ;; *cca*) module unload python @@ -82,7 +82,7 @@ Example ``jobscript.ksh`` module load eccodes/2.12.0 module load emos export SCRATCH=${TMPDIR} - export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + export PATH=${PATH}:${HOME}/flex_extract_v7.1/Source/Python ;; esac diff --git a/Documentation/html/_sources/Documentation/Input/run.rst.txt b/Documentation/html/_sources/Documentation/Input/run.rst.txt index 41d766d0a0f658ef68ae6e468d31e1939012ac4f..658b89275a0eea08a37f2d53b15326a690ef2ce0 100644 --- a/Documentation/html/_sources/Documentation/Input/run.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/run.rst.txt @@ -12,9 +12,6 @@ Based on these input information ``flex_extract`` applies one of the application -PUT IN HERE A BLOCKDIAGRAM OF RAW PROGRAM FLOW - - Submission Parameter -------------------- @@ -42,7 +39,7 @@ Usage of ``submit.py`` (optional) --------------------------------- It is also possible to start ``flex_extract`` directly from command line by using the ``submit.py`` script instead of the wrapping Shell script ``run.sh``. This top-level script is located in -``flex_extract_vX.X/source/python`` and is executable. With the ``help`` parameter we see again all possible +``flex_extract_vX.X/Source/Python`` and is executable. With the ``help`` parameter we see again all possible command line parameter. .. code-block:: bash diff --git a/Documentation/html/_sources/Documentation/Input/setup.rst.txt b/Documentation/html/_sources/Documentation/Input/setup.rst.txt index 7999511d03817b2fb0b05cf4e98b7b86d8f2b84a..05fce15064106a3afe4b0821d66974bb74cb6867 100644 --- a/Documentation/html/_sources/Documentation/Input/setup.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/setup.rst.txt @@ -12,7 +12,7 @@ It calls the top-level Python script ``install.py`` which does all necessary ope - create a tar-ball of all necessary files - copying tar-ball to target location (depending on application mode and installation path) - submit compilation script to batch queue at ECMWF servers (in **remote** and **gateway** mode) or just untar tar-ball at target location (**local mode**) -- compilation of the FORTRAN90 program ``CONVERT2`` +- compilation of the FORTRAN90 program ``calc_etadot`` The Python installation script ``install.py`` has a couple of command line arguments which are defined in ``setup.sh`` in the section labelled with "*AVAILABLE COMMANDLINE ARGUMENTS TO SET*". The user has to adapt these parameters for his personal use. The parameters are listed and described in :ref:`ref-instparams`. The script also does some checks to guarantee necessary parameters were set. @@ -155,7 +155,7 @@ Usage of ``install.py`` (optional) ---------------------------------- It is also possible to start the installation process of ``flex_extract`` directly from command line by using the ``install.py`` script instead of the wrapping Shell script ``setup.sh``. This top-level script is located in -``flex_extract_vX.X/source/python`` and is executable. With the ``help`` parameter we see again all possible +``flex_extract_vX.X/Source/Python`` and is executable. With the ``help`` parameter we see again all possible command line parameter. .. code-block:: bash diff --git a/Documentation/html/_sources/Documentation/Input/templates.rst.txt b/Documentation/html/_sources/Documentation/Input/templates.rst.txt index 137b36ca9696fc2d0ffdabc029c194c650168cb2..109175a39fa211a778cc407bd264f6a0ea593660 100644 --- a/Documentation/html/_sources/Documentation/Input/templates.rst.txt +++ b/Documentation/html/_sources/Documentation/Input/templates.rst.txt @@ -2,7 +2,7 @@ Templates ********* -In ``flex_extract`` we use the Python package ``genshi`` (`ref <https://genshi.edgewall.org/>`_) to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code. +In ``flex_extract`` we use the Python package `genshi <https://genshi.edgewall.org/>`_ to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code. .. note:: Usually it is not recommended to change anything in these files without being able to understand the effects. @@ -14,8 +14,8 @@ The following templates are used and can be found in directory ``flex_extract_vX convert.nl ---------- - This is the template for a Fortran namelist file called ``fort.4`` which will be read by ``CONVERT2``. - It contains all the parameters ``CONVERT2`` needs. + This is the template for a Fortran namelist file called ``fort.4`` which will be read by ``calc_etadot``. + It contains all the parameters ``calc_etadot`` needs. .. code-block:: fortran @@ -124,7 +124,7 @@ compilejob.template mkdir -p $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION} cd $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION} # if FLEXPART_ROOT is not set this means cd to the home directory tar -xvf $${HOME}/flex_extract_v$${VERSION}.tar - cd source/fortran + cd Source/Fortran \rm *.o *.mod $fortran_program make -f $${MAKEFILE} >flexcompile 2>flexcompile @@ -190,7 +190,7 @@ job.temp module load python3 module load eccodes/2.12.0 module load emos/455-r64 - export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python ;; *cca*) module unload python @@ -199,7 +199,7 @@ job.temp module load eccodes/2.12.0 module load emos export SCRATCH=$${TMPDIR} - export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python ;; esac diff --git a/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt b/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt index 909cb94456e5251e6e1585831b830943926f6a22..27fd4c1ebaa21a36dd2faee8889e8187c85740ee 100644 --- a/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt +++ b/Documentation/html/_sources/Documentation/Overview/app_modes.rst.txt @@ -7,6 +7,7 @@ Application Modes .. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states .. _instructions: https://apps.ecmwf.int/registration/ +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home .. _ref-app-modes: @@ -16,12 +17,12 @@ Arising from the two user groups described in :doc:`../../Ecmwf/access`, ``flex_ .. _ref-remote-desc: 1. Remote (member) - In the **Remote mode** the user works directly on ECMWF Linux member state server, such as ``ecgate`` or ``cca``. The software will be installed in the ``$HOME`` directory. The user does not need to install any of the additional third-party libraries mentioned in :ref:`ref-requirements` as ECMWF provides everything with environment modules. The module selection will be done automatically in ``flex_extract``. + In the **Remote mode** the user works directly on ECMWF Linux member state server, such as ``ecgate`` or ``cca/ccb``. The software will be installed in the ``$HOME`` directory. The user does not need to install any of the additional third-party libraries mentioned in :ref:`ref-requirements` as ECMWF provides everything with environment modules. The module selection will be done automatically in ``flex_extract``. .. _ref-gateway-desc: 2. Gateway (member) - The **Gateway mode** can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool ``ecaccess``. The installation script of ``flex_extract`` must be executed at the local gateway server such that the software will be installed in the ``$HOME`` directory at the ECMWF server and some extra setup is done in the local ``flex_extract`` directory at the local gateway server. For more information about establishing a gateway server please see section ???. For the **Gateway mode** the necessary environment has to be established which is described in :ref:`ref-prep-gateway`. + The **Gateway mode** can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool ``ecaccess``. The installation script of ``flex_extract`` must be executed at the local gateway server such that the software will be installed in the ``$HOME`` directory at the ECMWF server and some extra setup is done in the local ``flex_extract`` directory at the local gateway server. For more information about establishing a gateway server please see `ECMWF's instructions on gateway server`_. For the **Gateway mode** the necessary environment has to be established which is described in :ref:`ref-prep-gateway`. .. _ref-local-desc: diff --git a/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt b/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt index 21d0bdceae9bb78b9e5585845c25190ed1726d87..074d414c625e265e2dadb6d25fc79d0a802beeb9 100644 --- a/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt +++ b/Documentation/html/_sources/Documentation/Overview/prog_flow.rst.txt @@ -25,7 +25,7 @@ The ``submit.py`` Python program is called by the Shell script ``run.sh`` or ``r 2. Retrieves data from MARS: It creates and sends MARS-requests either on the local machine or on ECMWF server, that receives the data and stores them in a specific format in GRIB files. If the parameter ``REQUEST`` was set ``1`` the data are not received but a file ``mars_requests.csv`` is created with a list of MARS requests and their settings. If it is set to ``2`` the file is created in addition to retrieving the data. The requests are created in an optimised way by splitting in time, jobs and parameters. 3. Post-process data to create final ``FLEXPART`` input files: - After all data is retrieved, the disaggregation of flux fields (`see here <../disagg.html>`_ ) is done as well as the calculation of vertical velocity (`see here <../vertco.html>`_) by the Fortran program ``COVERT2``. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for ``FLEXPART``. Since model level fields are typically in *GRIB2* format whereas surface level fields are still in *GRIB1* format, they can be converted into GRIB2 if parameter ``FORMAT`` is set to *GRIB2*. Please note, however, that older versions of FLEXPART may have difficulties reading pure *GRIB2* files since some parameter IDs change in *GRIB2*. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the ``ECtrans`` utility if the parameter ``ECTRANS`` is set to ``1`` and the parameters ``GATEWAY``, ``DESTINATION`` have been set properly during installation. The status of the transfer can be checked with the command ``ecaccess-ectrans-list`` (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools. + After all data is retrieved, the disaggregation of flux fields (`see here <../disagg.html>`_ ) is done as well as the calculation of vertical velocity (`see here <../vertco.html>`_) by the Fortran program ``calc_etadot``. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for ``FLEXPART``. Since model level fields are typically in *GRIB2* format whereas surface level fields are still in *GRIB1* format, they can be converted into GRIB2 if parameter ``FORMAT`` is set to *GRIB2*. Please note, however, that older versions of FLEXPART may have difficulties reading pure *GRIB2* files since some parameter IDs change in *GRIB2*. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the ``ECtrans`` utility if the parameter ``ECTRANS`` is set to ``1`` and the parameters ``GATEWAY``, ``DESTINATION`` have been set properly during installation. The status of the transfer can be checked with the command ``ecaccess-ectrans-list`` (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools. diff --git a/Documentation/html/_sources/Documentation/input.rst.txt b/Documentation/html/_sources/Documentation/input.rst.txt index 8506d53d1d5da9a7ac9e2f3a9c04fb53cc7c64f8..1dbfe31f6fbfc5f447fa2bacb2a522023185e5a6 100644 --- a/Documentation/html/_sources/Documentation/input.rst.txt +++ b/Documentation/html/_sources/Documentation/input.rst.txt @@ -34,8 +34,8 @@ Controlling .. code-block:: bash cd flex_extract_vX.X - python3 source/python/install.py --help - python3 source/python/submit.py --help + python3 Source/Python/install.py --help + python3 Source/Python/submit.py --help In this new version we provide also the wrapping Shell scripts setup_ and run_, which sets the command line parameters, do some checks and execute the corresponing Python scripts ``install.py`` and ``submit.py`` respectivley. diff --git a/Documentation/html/_sources/Documentation/output.rst.txt b/Documentation/html/_sources/Documentation/output.rst.txt index 76d9f2e8490bc088dcf404bf78f09c92b02d7e82..40e8310376aaa02364364b18498cb9457d3a3328 100644 --- a/Documentation/html/_sources/Documentation/output.rst.txt +++ b/Documentation/html/_sources/Documentation/output.rst.txt @@ -105,7 +105,7 @@ Ensembles can be retrieved and are addressed by the grib message parameter ``num Additional fields with new precipitation disaggregation ------------------------------------------------------- -The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see :doc:`disagg` ??????????????????. +The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see :doc:`disagg`. The two additional fields are marked with the ``step`` parameter in the Grib messages and are set to "1" and "2" for sub-grid point 1 and 2 respectively. The output filenames do not change in this case. Below is an example list of precipitation fields in an output file generated with the new disaggregation method: @@ -128,7 +128,7 @@ Below is an example list of precipitation fields in an output file generated wit Temporary files =============== -``Flex_extract`` works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the ``DEBUG`` mode is switched on (see :doc:`Input/control_params`. +``Flex_extract`` works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the ``DEBUG`` mode is switched on (see :doc:`Input/control_params`). MARS grib files --------------- @@ -219,7 +219,7 @@ The date format is YYYYMMDDHH. The optional block ``[.N<xxx>]`` marks the ensemb fort files ---------- -There are a number of input files for the ``CONVERT2`` Fortran program named +There are a number of input files for the ``calc_etadot`` Fortran program named .. code-block:: bash @@ -244,21 +244,21 @@ The following table defines the numbers with their corresponding content. "21", "eta-coordinate vertical velocity (optional)" "22", "total cloud water content (optional)" -Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for ``FLEXPART v10`` and newer. Please see section ????????? for more information. +Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for ``FLEXPART v10`` and newer. -The ``CONVERT2`` program saves its results in file ``fort.15`` which typically contains: +The ``calc_etadot`` program saves its results in file ``fort.15`` which typically contains: -.. csv-table:: Output file of the Fortran program ``CONVERT2`` +.. csv-table:: Output file of the Fortran program ``calc_etadot`` :header: "Number", "Content" :widths: 5, 20 "15", "U and V wind components, eta-coordinate vertical velocity, temperature, surface pressure, specific humidity " -More details about the content of ``CONVERT2`` can be found in :doc:`vertco`. +More details about the content of ``calc_etadot`` can be found in :doc:`vertco`. .. note:: - The ``fort.4`` file is the namelist file to drive the Fortran program ``CONVERT2``. It is therefore also an input file and is described in ??????????????? + The ``fort.4`` file is the namelist file to drive the Fortran program ``calc_etadot``. It is therefore also an input file. Example of a namelist: @@ -288,4 +288,4 @@ More details about the content of ``CONVERT2`` can be found in :doc:`vertco`. .. toctree:: :hidden: :maxdepth: 2 - \ No newline at end of file + diff --git a/Documentation/html/_sources/Documentation/overview.rst.txt b/Documentation/html/_sources/Documentation/overview.rst.txt index 9bde61b398e8273f68dc11a835758b21a998bafa..1e9af1b4f5f8aa4bd6f92b237d8dbcbeee82a436 100644 --- a/Documentation/html/_sources/Documentation/overview.rst.txt +++ b/Documentation/html/_sources/Documentation/overview.rst.txt @@ -29,7 +29,7 @@ Some details on the tasks and program worksteps are described in :doc:`Overview/ - Files and modules as table with information about unit tests - Api - - Fortran program - CONVERT2 + - Fortran program - calc_etadot - Package diagram - Api diff --git a/Documentation/html/_sources/Documentation/vertco.rst.txt b/Documentation/html/_sources/Documentation/vertco.rst.txt index 4dea24a9e58275ba417fa64fa0daa946e8cb65bd..e0d1d6633392a6d31ac9f34002d86fe8b132d8b5 100644 --- a/Documentation/html/_sources/Documentation/vertco.rst.txt +++ b/Documentation/html/_sources/Documentation/vertco.rst.txt @@ -22,10 +22,10 @@ Calculation from the horizontal wind field is still required for historical case Calculation of vertical velocity from horizontal wind using the continuity equation =================================================================================== -The vertical velocity is computed by the FORTRAN90 program ``CONVERT2`` in the ECMWF -vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of ``CONVERT2`` can be found in the +The vertical velocity is computed by the FORTRAN90 program ``calc_etadot`` in the ECMWF +vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of ``calc_etadot`` can be found in the documents v20_update_protocol.pdf, V30_update_protocol.pdf and -V40_update_protocol.pdf. The computational demand and accuracy of ``CONVERT2`` is highly +V40_update_protocol.pdf. The computational demand and accuracy of ``calc_etadot`` is highly dependent on the specification of parameters ``GAUSS``, ``RESOL`` and ``SMOOTH``. The following guidance can be given for choosing the right parameters: @@ -44,7 +44,7 @@ following guidance can be given for choosing the right parameters: Calculation of vertical velocity from pre-calculated MARS parameter 77 ====================================================================== -Since November 2008, the parameter 77 (deta/dt) is stored in ``MARS`` on full model levels. ``FLEXTRA``/``FLEXPART`` in its current version requires ``deta/dt`` on model half levels, multiplied by ``dp/deta``. In ``flex_extract``, the program ``CONVERT2`` assumes that this parameter is available if the ``CONTROL`` parameter ``ETA`` is set to 1. +Since November 2008, the parameter 77 (deta/dt) is stored in ``MARS`` on full model levels. ``FLEXTRA``/``FLEXPART`` in its current version requires ``deta/dt`` on model half levels, multiplied by ``dp/deta``. In ``flex_extract``, the program ``calc_etadot`` assumes that this parameter is available if the ``CONTROL`` parameter ``ETA`` is set to 1. It is recommended to use the pre-calculated parameter 77 by setting ``ETA`` to 1 whenever possible. diff --git a/Documentation/html/_sources/Evaluation/testcases.rst.txt b/Documentation/html/_sources/Evaluation/testcases.rst.txt index aa257d29d7b2503a7eb589881f14e779ae7c1934..4855aa703ec7129d8ee536afc7dab6f715314152 100644 --- a/Documentation/html/_sources/Evaluation/testcases.rst.txt +++ b/Documentation/html/_sources/Evaluation/testcases.rst.txt @@ -6,14 +6,14 @@ Testcases Comparison of MARS requests =========================== - + UNDER CONSTRUCTION Comparison of grib files ======================== - + UNDER CONSTRUCTION diff --git a/Documentation/html/_sources/Installation/gateway.rst.txt b/Documentation/html/_sources/Installation/gateway.rst.txt index c452eb6b5868150e55aa6ae16ef28a30e41b96a9..34764c8fe0bc88e8352d77daa5dd4fb57bda945a 100644 --- a/Documentation/html/_sources/Installation/gateway.rst.txt +++ b/Documentation/html/_sources/Installation/gateway.rst.txt @@ -65,12 +65,12 @@ The next step is to create an *ecaccess certificate* to be able to send and rece .. code-block:: bash $ ecaccess-certificate-create - Please enter your user-id: example_username + Please enter your user-id: <username> Your passcode: *** -The easiest way to install all required packages is to use the package management system of your Linux distribution which required admin rights. +The easiest way to install all required packages is to use the package management system of your Linux distribution which requires admin rights. The installation was tested under *GNU/Linux Debian buster* and *Ubuntu 18.04 Bionic Beaver*. .. code-block:: sh @@ -105,28 +105,35 @@ If there are no error messages, you succeeded in setting up the environment. Gateway installation ==================== -``Flex_extract`` will be run on an ECMWF server which makes the setup the same as for the **remote mode**. In the ``setup.sh`` script `[ref] <Documentation/Input/setup.html>`_, select the ``makefile.gfortran`` for the ``CONVERT2`` Fortran program and the ECMWF server (*target*) you would like to use. +``Flex_extract`` will be run on an ECMWF server which makes the setup the same as for the **remote mode**. In the ``setup.sh`` script :doc:`../Documentation/Input/setup`, select the ``makefile_ecgate`` or ``makefile_cray`` for the ``calc_etadot`` Fortran program and the ECMWF server (*target*) you would like to use. The job script, send to the job queue via the ECaccess software, loads the required modules from the module system. For enabling the file transfer via the gateway, you have to set the *ECUID*, *ECGID*, *GATEWAY* and *DESTINATION* parameter values. + +Open ``setup.sh`` with your preferred editor (e.g., nano) and adapt the values: ++----------------------------------------------+----------------------------------------------+ +| Use this for target = **ectrans** | Use this for target = **cca** or **ccb** | ++----------------------------------------------+----------------------------------------------+ +| .. code-block:: bash | .. code-block:: bash | +| | | +| ... | ... | +| # -----------------------------------------| # -----------------------------------------| +| # AVAILABLE COMMANDLINE ARGUMENTS TO SET | # AVAILABLE COMMANDLINE ARGUMENTS TO SET | +| # | # | +| # THE USER HAS TO SPECIFY THESE PARAMETER | # THE USER HAS TO SPECIFY THESE PARAMETER | +| # | # | +| TARGET='ecgate' | TARGET='cca' | +| MAKEFILE='makefile_ecgate' | MAKEFILE='makefile_cray' | +| ECUID='<username>' | ECUID='<username>' | +| ECGID='<groupID>' | ECGID='<groupID>' | +| GATEWAY='<gatewayname>' | GATEWAY='<gatewayname>' | +| DESTINATION='<assoc_name>@genericSftp' | DESTINATION='<assoc_name>@genericSftp' | +| INSTALLDIR=None | INSTALLDIR=None | +| JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | +| CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | +| ... | ... | ++----------------------------------------------+----------------------------------------------+ + -.. code-block:: bash - :caption: 'Example settings for a gateway installation.' - :name: setup.sh - - # ----------------------------------------------------------------- - # AVAILABLE COMMANDLINE ARGUMENTS TO SET - # - # THE USER HAS TO SPECIFY THESE PARAMETER - # - TARGET='ecgate' - MAKEFILE='makefile.gfortran' - ECUID='uid' - ECGID='gid' - GATEWAY='localserver.tld' - DESTINATION='association_name@genericSftp' - INSTALLDIR=None - JOB_TEMPLATE='job.template' - CONTROLFILE='CONTROL_EA5' Afterwards, type: @@ -145,24 +152,18 @@ to start the installation. You should see the following on standard output. Job compilation script has been submitted to ecgate for installation in ${HOME}/flex_extract_vX.X You should get an email with subject "flexcompile" within the next few minutes! -``Flex_extract`` uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: +``Flex_extract`` automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: .. code-block:: bash - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 - -rwxr-x---. 1 USER at 353134 May 23 12:27 CONVERT2 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + lrwxrwxrwx. 1 <username> at 20 Mar 8 14:11 calc_etadot -> calc_etadot_fast.out SUCCESS! - - - - - - - diff --git a/Documentation/html/_sources/Installation/local.rst.txt b/Documentation/html/_sources/Installation/local.rst.txt index d0276bf56a2f8443c7241302fe7c43c4b6cc77f8..cf86470b625d135acfea6f15db98b58daf924f0a 100644 --- a/Documentation/html/_sources/Installation/local.rst.txt +++ b/Documentation/html/_sources/Installation/local.rst.txt @@ -61,7 +61,7 @@ and libraries, since the preparation of the extraction and the post-processing i | * `genshi`_ | * `eccodes`_ | | * `eccodes for python`_ | * `emoslib`_ | | * `ecmwf-api-client`_ (everything except ERA5) | | -| * `cdsapi`_ (just for ERA5) | | +| * `cdsapi`_ (just for ERA5 and member user) | | +------------------------------------------------+-----------------+ @@ -115,7 +115,7 @@ ECMWF Web API: Go to `MARS access`_ website and log in with your credentials. Afterwards, on this site in section "Install ECMWF KEY" the key for the ECMWF Web API should be listed. Please follow the instructions in this section under 1 (save the key in a file `.ecmwfapirc` in your home directory). CDS API: - Go to 'CDS API registration'_ and register there too. Log in at the `cdsapi`_ website and follow the instructions at section "Install the CDS API key" to save your credentials in a `.cdsapirc` file. + Go to `CDS API registration`_ and register there too. Log in at the `cdsapi`_ website and follow the instructions at section "Install the CDS API key" to save your credentials in a `.cdsapirc` file. .. _ref-test-local: @@ -262,22 +262,15 @@ Please use this piece of Python code to retrieve a small *ERA5* data sample as a - - .. _ref-install-local: Local installation ================== -First prepare the Fortran ``makefile`` for your environment and set it in the ``setup.sh`` script. (See section :ref:`ref-convert` for information on the Fortran program.) -``flex_extract`` comes with two ``makefiles`` prepared for the ``gfortran`` and -the ``ifort`` compiler. The ``gfortran`` version assumes that ``eccodes`` and ``emoslib`` are installed as distribution packages. - - * makefile.local.gfortran - * makefile.local.ifort +First prepare the Fortran ``makefile`` for your environment and set it in the ``setup.sh`` script. (See section :ref:`Fortran Makefile <ref-convert>` for more information.) +``flex_extract`` comes with two ``makefiles`` prepared for the ``gfortran`` compiler. One for the normal use ``makefile_fast`` and one for debugging ``makefile_debug`` which is usually only resonable for developers. -They can be found at ``flex_extract_vX.X/Source/Fortran``, where -``vX.X`` should be substituted with the current version number. +They assume that ``eccodes`` and ``emoslib`` are installed as distribution packages and can be found at ``flex_extract_vX.X/Source/Fortran``, where ``vX.X`` should be substituted with the current version number. .. caution:: It is necessary to adapt **ECCODES_INCLUDE_DIR** and **ECCODES_LIB** in these @@ -290,7 +283,7 @@ choice to modify with an editor of your choice. We use the ``nedit`` in this cas .. code-block:: bash cd flex_extract_vX.X/Source/Fortran - nedit makefile.local.gfortran + nedit makefile_fast Edit the paths to the ``eccodes`` library on your local machine. @@ -318,7 +311,7 @@ and **ECCODES_LIB** and save it. ECCODES_LIB= -L/usr/lib -leccodes_f90 -leccodes -lm -The Fortran program called ``CONVERT2`` will be compiled during the +The Fortran program called ``calc_etadot`` will be compiled during the installation process.Therefore the name of the ``makefile`` to be used needs to be given in ``setup.sh``. In the root directory of ``flex_extract``, open the ``setup.sh`` script @@ -337,7 +330,7 @@ and adapt the installation parameters in the section labelled with # THE USER HAS TO SPECIFY THESE PARAMETER # TARGET='local' - MAKEFILE='makefile.local.gfortran' + MAKEFILE='makefile_fast' ECUID=None ECGID=None GATEWAY=None @@ -359,23 +352,20 @@ to start the installation. You should see the following standard output. .. code-block:: bash - # Output of setup.sh - WARNING: installdir has not been specified - flex_extract will be installed in here by compiling the Fortran source in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/source/fortran - Install flex_extract_v7.1 software at local in directory /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1 - - Using makefile: Makefile.local.gfortran - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -O3 -O3 -fopenmp -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/gcc-4.9.3/grib_api-1.14.3/lib -Bstatic -lgrib_api_f77 -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper -lemosR64 - - -rwxrwxr-x. 1 philipa8 tmc 282992 May 23 22:27 ./CONVERT2 - - - - + # Output of setup.sh + WARNING: installdir has not been specified + flex_extract will be installed in here by compiling the Fortran source in <path-to-flex_extract>/flex_extract_v7.1/Source/Fortran + Install flex_extract_v7.1 software at local in directory <path-to-flex_extract>/flex_extract_v7.1 + + Using makefile: makefile_fast + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + + lrwxrwxrwx. 1 <username> tmc 20 15. Mär 13:31 ./calc_etadot -> calc_etadot_fast.out diff --git a/Documentation/html/_sources/Installation/remote.rst.txt b/Documentation/html/_sources/Installation/remote.rst.txt index b2e4d42a856f995e0722e764aabd08f40e9fb4c0..a5f863409acbb33d511de8fa96b4f163f2c795ba 100644 --- a/Documentation/html/_sources/Installation/remote.rst.txt +++ b/Documentation/html/_sources/Installation/remote.rst.txt @@ -76,8 +76,7 @@ Substitute *<ecuid>* with your ECMWF user name: ssh -X <ecuid>@ecaccess.ecmwf.int -This will lead to the following output on the command line, asking for your -password: +This will lead to the following output on the command line, asking for your password: .. code-block:: bash @@ -116,12 +115,12 @@ Untar the file and change into the ``flex_extract`` root directory. Execute the ``setup.sh`` script from the ``flex_extract``'s root directory. Before executing it, it is necessary to adapt some parameters from ``setup.sh`` -described in :doc:`Documentation/Input/setup`. +described in :doc:`../Documentation/Input/setup`. -Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the values: +Open ``setup.sh`` with your preferred editor (e.g., nano) and adapt the values: +----------------------------------------------+----------------------------------------------+ -| Use this for target = **ectrans** | Use this for target = **cca** | +| Use this for target = **ectrans** | Use this for target = **cca** or **ccb** | +----------------------------------------------+----------------------------------------------+ | .. code-block:: bash | .. code-block:: bash | | | | @@ -132,11 +131,11 @@ Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the valu | # THE USER HAS TO SPECIFY THESE PARAMETER | # THE USER HAS TO SPECIFY THESE PARAMETER | | # | # | | TARGET='ecgate' | TARGET='cca' | -| MAKEFILE='Makefile.gfortran' | MAKEFILE='Makefile.CRAY' | -| ECUID='uid' | ECUID='uid' | -| ECGID='gid' | ECGID='gid' | -| GATEWAY=None | GATEWAY=None | -| DESTINATION=None | DESTINATION=None | +| MAKEFILE='makefile_ecgate' | MAKEFILE='makefile_cray' | +| ECUID='<username>' | ECUID='<username>' | +| ECGID='<groupID>' | ECGID='<groupID>' | +| GATEWAY='<gatewayname>' | GATEWAY='<gatewayname>' | +| DESTINATION='<username>@genericSftp' | DESTINATION='<username>@genericSftp' | | INSTALLDIR=None | INSTALLDIR='' | | JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | | CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | @@ -168,21 +167,18 @@ to start the installation. You should see the following on standard output. You should get an email with subject "flexcompile" within the next few minutes! -``Flex_extract`` uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: +``Flex_extract`` automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: .. code-block:: bash - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 - -rwxr-x---. 1 USER at 353134 May 23 12:27 CONVERT2 - SUCCESS! - - - - + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + lrwxrwxrwx. 1 <username> at 20 Mar 8 14:11 calc_etadot -> calc_etadot_fast.out + SUCCESS! diff --git a/Documentation/html/_sources/Support/known_bugs_issues.rst.txt b/Documentation/html/_sources/Support/known_bugs_issues.rst.txt index 9ca018cf8f1ab82c790a237d0f58616e8fd34437..fdfff5cc0b08a28a7a3ec033e1fda5ba9650fdd3 100644 --- a/Documentation/html/_sources/Support/known_bugs_issues.rst.txt +++ b/Documentation/html/_sources/Support/known_bugs_issues.rst.txt @@ -1,4 +1,25 @@ Known Bugs and Issues -===================== +********************* + +Release v7.1 +============ + + +CDS API and ERA5 data +--------------------- + + See ticket `#230 <https://www.flexpart.eu/ticket/230>`_ on flexpart.eu for information. + + +Installation problems with ``GATEWAY`` and ``DESTINATION`` parameters +--------------------------------------------------------------------- + + See ticket `#263 <https://www.flexpart.eu/ticket/263>`_ on flexpart.eu for information. + + +Installation problems with the Fortran program ``calc_etadot`` +-------------------------------------------------------------- + + See ticket `#264 <https://www.flexpart.eu/ticket/264>`_ on flexpart.eu for information. + - \ No newline at end of file diff --git a/Documentation/html/_sources/changelog.rst.txt b/Documentation/html/_sources/changelog.rst.txt index 31c200e2a57361b2ff74f19767322c0e4bb8d8c0..dc8b3d387e8d4a76c4b17b95360041b0cd18d3c4 100644 --- a/Documentation/html/_sources/changelog.rst.txt +++ b/Documentation/html/_sources/changelog.rst.txt @@ -8,6 +8,19 @@ Changelog .. _CDS API: https://cds.climate.copernicus.eu/api-how-to .. _ECMWF Web API: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home .. _new algorithm: https://www.geosci-model-dev.net/11/2503/2018/ + + +.. _ref-v711: + +Release v7.1.1 +-------------- + +Bug fixes +######### + * corrected naming of makefiles and Fortran program executable in online documentation + * adapted checking for ``GATEWAY`` and ``DESTINATION`` parameter + * fixed makefiles to use f90 Fortran files for ECMWF server + .. _ref-v71: @@ -32,6 +45,7 @@ Changes * upgrade from grib_api to ecCodes * completely revised/refactored python section * restructured program directories + * Fortran program name changed from ``CONVERT2`` to ``calc_etadot`` .. _ref-v704: diff --git a/Documentation/html/_sources/dev_guide.rst.txt b/Documentation/html/_sources/dev_guide.rst.txt index 40dd2aebf4c3ccb836df066d95c380e9f86bee93..05cde2cccd2032d6d12935156d3b5259a7f58e2d 100644 --- a/Documentation/html/_sources/dev_guide.rst.txt +++ b/Documentation/html/_sources/dev_guide.rst.txt @@ -3,6 +3,9 @@ Developer Guide UNDER CONSTRUCTION +.. note:: + + This section still needs to be done. .. repository (how /who manages the code, where to get) @@ -11,4 +14,4 @@ Developer Guide :hidden: :maxdepth: 2 - Developers/gen_docu \ No newline at end of file + Developers/gen_docu diff --git a/Documentation/html/_sources/documentation.rst.txt b/Documentation/html/_sources/documentation.rst.txt index 77e3f6f1178386ee63fd55f54157ba128858429e..b6f78f596f5a67e82f85ee490e9c231e9f8e07e6 100644 --- a/Documentation/html/_sources/documentation.rst.txt +++ b/Documentation/html/_sources/documentation.rst.txt @@ -12,7 +12,7 @@ Documentation Vertical Coordinate (Under construction) - Methods (GAUSS, ETA, OMEGA) - - CONVERT + - calc_etadot Auto Generated Documentation - Python diff --git a/Documentation/html/_sources/evaluation.rst.txt b/Documentation/html/_sources/evaluation.rst.txt index a0d4d2a6aa7d8516b4420f448a168efcbf537dfc..65ef79934adc72117f61376f7af16e32c0486879 100644 --- a/Documentation/html/_sources/evaluation.rst.txt +++ b/Documentation/html/_sources/evaluation.rst.txt @@ -3,7 +3,10 @@ Evaluation UNDER CONSTRUCTION - +.. note:: + + This section in the online documentation still needs to be done. + Currently, evaluation methods and information can be found in the `flex_extract discussion paper <https://www.geosci-model-dev-discuss.net/gmd-2019-358/>`_ of the Geoscientific Model Development journal. diff --git a/Documentation/html/_sources/index.rst.txt b/Documentation/html/_sources/index.rst.txt index 30308dd714489b7890e2f28a3e04fe0d3104a2b9..9835e975aa60a61927233136b935645fea4d0126 100644 --- a/Documentation/html/_sources/index.rst.txt +++ b/Documentation/html/_sources/index.rst.txt @@ -26,7 +26,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/ecmwf_icon.png"> </div> <h2><a href="ecmwf_data.html">ECMWF data</a></h2> <ul> @@ -61,7 +61,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/check_icon.png"> </div> <h2><a href="evaluation.html">Evaluation</a></h2> <ul> @@ -72,7 +72,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/guide_icon.png"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/dev_icon.png"> </div> <h2><a href="dev_guide.html">Developer</a></h2> <ul> @@ -93,10 +93,10 @@ Welcome to ``flex_extract``'s user documentation! </div> <h2><a href="changelog.html">Changelog</a></h2> <ul> + <li><a href="changelog.html#ref-v711">v7.1.1</a></li> <li><a href="changelog.html#ref-v71">v7.1</a></li> <li><a href="changelog.html#ref-v704">v7.0.4</a></li> <li><a href="changelog.html#ref-v703">v7.0.3</a></li> - <li><a href="changelog.html#ref-v60">v6</a></li> </ul> </td> <td style="width:30%;height:150px;"> diff --git a/Documentation/html/_sources/installation.rst.txt b/Documentation/html/_sources/installation.rst.txt index a65057f9347f1bf3ae34740210df1295ce47f70b..7e7bbe2c8e0f50082df056671b9e55e7014fa65c 100644 --- a/Documentation/html/_sources/installation.rst.txt +++ b/Documentation/html/_sources/installation.rst.txt @@ -123,7 +123,7 @@ git repo .. code-block:: bash - $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flexpart + $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flex_extract @@ -222,7 +222,7 @@ Test installation Fortran program test -------------------- -To check whether the Fortran program ``CONVERT2`` has been compiled and runs properly, it can be applied to a prepared minimal dataset. +To check whether the Fortran program ``calc_etadot`` has been compiled and runs properly, it can be applied to a prepared minimal dataset. For this, go from the ``flex_extract`` root directory to the ``Testing/Installation/Convert/`` directory and execute the Fortran program. @@ -233,19 +233,15 @@ For this, go from the ``flex_extract`` root directory to the ``Testing/Installat cd Testing/Installation/Convert # execute the Fortran progam without arguments - ../../../Source/Fortran/CONVERT2 + ../../../Source/Fortran/calc_etadot The installation was successfull if you obtain on standard output: .. code-block:: bash + + STATISTICS: 98842.4598 98709.7359 5120.5385 + STOP SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS - readspectral: 1 records read - readlatlon: 8 records read - STATISTICS: 98842.4598 98709.7359 5120.5385 - readlatlon: 4 records read - readlatlon: 4 records read - readlatlon: 4 records read - SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS Now go back to the root directory: diff --git a/Documentation/html/_sources/quick_start.rst.txt b/Documentation/html/_sources/quick_start.rst.txt index a34faa12ec79b748418c485b5fc577611551b3b8..ee94135c001d64b31b2280f53aade09a3f938a85 100644 --- a/Documentation/html/_sources/quick_start.rst.txt +++ b/Documentation/html/_sources/quick_start.rst.txt @@ -30,7 +30,7 @@ Within this directory you can find everything you need to modify and run ``flex_ The ``Jobscripts`` directory is used to store the Korn shell job scripts generated by a ``flex_extract`` run in the **Remote** or **Gateway** mode. They are used to submit the setup information to the ECMWF server and start the jobs in ECMWF's batch mode. The typical user must not touch these files. They will be generated from template files which are stored in the ``Templates`` directory under ``flex_extract_vX.X``. Usually there will be a ``compilejob.ksh`` and a ``job.ksh`` script which are explained in the section :doc:`Documentation/input`. In the rare case of operational data extraction there will be a ``joboper.ksh`` which is designed to get the time parameters from environment variables at the ECMWF servers. -The ``Controls`` directory contains a number of example ``CONTROL`` files. These``CONTROL`` files represent the current range of possible dataset retrievals with ``flex_extract``. Some parameters in the ``CONTROL`` files can be adapted and some others should not be changed. In this :doc:`quick_start` guide we explain how an extraction with ``flex_extract`` can be started in the different :doc:`Documentation/Overview/app_modes` and point out some specifics of each dataset and ``CONTROL`` file. +The ``Controls`` directory contains a number of example ``CONTROL`` files. These ``CONTROL`` files represent the current range of possible dataset retrievals with ``flex_extract``. Some parameters in the ``CONTROL`` files can be adapted and some others should not be changed. In this :doc:`quick_start` guide we explain how an extraction with ``flex_extract`` can be started in the different :doc:`Documentation/Overview/app_modes` and point out some specifics of each dataset and ``CONTROL`` file. Directly under ``Run`` you find the files ``run.sh`` and ``run_local.sh`` and according to your selected :doc:`Documentation/Overview/app_modes` there might also be a file named ``ECMWF_ENV`` for the user credentials to quickly and automatically access ECMWF servers. @@ -149,7 +149,7 @@ The last command lists the most recent logs and temporary retrieval directories │ ├── temporary files │ ├── CE000908* (resulting files) -If the job was submitted to the HPC ( ``queue=cca`` ) you may login to the HPC and look into the directory ``/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove`` for job logs. The working directories are deleted after job failure and thus normally cannot be accessed. +If the job was submitted to the HPC ( ``queue=cca`` or ``queue=ccb`` ) you may login to the HPC and look into the directory ``/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove`` for job logs. The working directories are deleted after job failure and thus normally cannot be accessed. To check if the resulting files are still transferred to local gateway server you can use the command ``ecaccess-ectrans-list`` or check the destination path for resulting files on your local gateway server. @@ -230,7 +230,6 @@ There you can select step by step what data suits your needs. This would be the .. figure:: _files/MARS_catalogue_snapshot.png -!!!!!!!! ADD HERE ANOTHER SCREENSHOT OF THE PARAMETER SELECTION AREA ( HAS TO BE DONE AT HOME ) Additionally, you can find a lot of helpful links to dataset documentations, direct links to specific dataset web catalogues or further general information at the `link collection <Ecmwf/ec-links.html>`_ in the ECMWF data section. @@ -275,7 +274,7 @@ The main differences and features in the datasets are listed in the table shown .. figure:: _files/dataset_cmp_table.png - DO THIS TABLE AGAIN BY HAND! + A common problem for beginners in retrieving ECMWF datasets is the mismatch in the definition of these parameters. For example, if you would like to retrieve operational data before ``June 25th 2013`` and set the maximum level to ``137`` you will get an error because this number of levels was first introduced at this effective day. So, be cautious in the combination of space and time resolution as well as the field types which are not available all the time. @@ -331,12 +330,9 @@ ERA-Interim ----------- This re-analysis dataset will exceed its end of production at 31st August 2019! -It is then available from 1st January 1979 to 31st August 2019. The ``etadot`` is not available in this dataset. Therefore ``flex_extract`` must select the ``GAUSS`` parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program ``CONVERT2``. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available. - +It is then available from 1st January 1979 to 31st August 2019. The ``etadot`` is not available in this dataset. Therefore ``flex_extract`` must select the ``GAUSS`` parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program ``calc_etadot``. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available. -.. todo:: - @LEO: please check the complete description and functionality of the CONTROL FILEs Operational data ---------------- @@ -356,9 +352,6 @@ It is recommended to submit such high resolution cases for single day retrievals These files defines the minimum number of parameters necessary to retrieve a daily subset. The setup of field types is optimal and should only be changed if the user understands what he does. The grid, domain and temporal resolution can be changed according to availability. -.. todo:: - - @LEO - explain the setup with 4V fields! Who can extract it, when would this be useful? .. note:: @@ -403,10 +396,7 @@ Ensemble members CONTROL_OD.ELDA.FC.eta.ens.double CONTROL_OD.ENFO.PF.ens -.. todo:: - @LEO: Please tell me why perturbed forecast are possible? Is it because of some user rights? I have no opportunity of retrieve PF data. - Specific features diff --git a/Documentation/html/_static/basic.css b/Documentation/html/_static/basic.css index 0807176ec0cb13c1214ddacecadfbfde5ecd7514..01192852b5c92c13a1cb27c0d2f84aee037691bc 100644 --- a/Documentation/html/_static/basic.css +++ b/Documentation/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -231,6 +231,16 @@ a.headerlink { visibility: hidden; } +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -279,6 +289,12 @@ img.align-center, .figure.align-center, object.align-center { margin-right: auto; } +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + .align-left { text-align: left; } @@ -287,6 +303,10 @@ img.align-center, .figure.align-center, object.align-center { text-align: center; } +.align-default { + text-align: center; +} + .align-right { text-align: right; } @@ -358,6 +378,11 @@ table.align-center { margin-right: auto; } +table.align-default { + margin-left: auto; + margin-right: auto; +} + table caption span.caption-number { font-style: italic; } @@ -391,6 +416,16 @@ table.citation td { border-bottom: none; } +th > p:first-child, +td > p:first-child { + margin-top: 0px; +} + +th > p:last-child, +td > p:last-child { + margin-bottom: 0px; +} + /* -- figures --------------------------------------------------------------- */ div.figure { @@ -460,11 +495,58 @@ ol.upperroman { list-style: upper-roman; } +li > p:first-child { + margin-top: 0px; +} + +li > p:last-child { + margin-bottom: 0px; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + dl { margin-bottom: 15px; } -dd p { +dd > p:first-child { margin-top: 0px; } @@ -537,6 +619,12 @@ dl.glossary dt { font-style: oblique; } +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + abbr, acronym { border-bottom: dotted 1px; cursor: help; @@ -584,6 +672,10 @@ div.code-block-caption + div > div.highlight > pre { margin-top: 0; } +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + div.code-block-caption span.caption-number { padding: 0.1em 0.3em; font-style: italic; diff --git a/Documentation/html/_static/dev_icon.png b/Documentation/html/_static/dev_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..32718db05cf7a8d709096cafea96c6c2fd7ecedf Binary files /dev/null and b/Documentation/html/_static/dev_icon.png differ diff --git a/Documentation/html/_static/doctools.js b/Documentation/html/_static/doctools.js index 344db17ddbb7aea09b227835a7cd1c3265aeb172..daccd209dab05a75f5627390e37a6b764e93f547 100644 --- a/Documentation/html/_static/doctools.js +++ b/Documentation/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -87,14 +87,13 @@ jQuery.fn.highlightText = function(text, className) { node.nextSibling)); node.nodeValue = val.substr(0, pos); if (isInSVG) { - var bbox = span.getBBox(); var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.x.baseVal.value = bbox.x; + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; rect.y.baseVal.value = bbox.y; rect.width.baseVal.value = bbox.width; rect.height.baseVal.value = bbox.height; rect.setAttribute('class', className); - var parentOfText = node.parentNode.parentNode; addItems.push({ "parent": node.parentNode, "target": rect}); @@ -284,10 +283,11 @@ var Documentation = { }, initOnKeyListeners: function() { - $(document).keyup(function(event) { + $(document).keydown(function(event) { var activeElementType = document.activeElement.tagName; // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { switch (event.keyCode) { case 37: // left var prevHref = $('link[rel="prev"]').prop('href'); diff --git a/Documentation/html/_static/documentation_options.js b/Documentation/html/_static/documentation_options.js index f4672a99be06566a71efb94aaa8df76bee8c6088..20b9bd7288928088ba6ab1dc03b32b582bee3e6b 100644 --- a/Documentation/html/_static/documentation_options.js +++ b/Documentation/html/_static/documentation_options.js @@ -3,8 +3,9 @@ var DOCUMENTATION_OPTIONS = { VERSION: '7.1 alpha', LANGUAGE: 'None', COLLAPSE_INDEX: false, + BUILDER: 'html', FILE_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, + NAVIGATION_WITH_KEYS: false }; \ No newline at end of file diff --git a/Documentation/html/_static/ecmwf_icon.png b/Documentation/html/_static/ecmwf_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b535c88c4f7613f61e2c44cd2cf1b81994639df Binary files /dev/null and b/Documentation/html/_static/ecmwf_icon.png differ diff --git a/Documentation/html/_static/jquery-3.4.1.js b/Documentation/html/_static/jquery-3.4.1.js new file mode 100644 index 0000000000000000000000000000000000000000..773ad95c56f8321eb4901736930024ec517a948a --- /dev/null +++ b/Documentation/html/_static/jquery-3.4.1.js @@ -0,0 +1,10598 @@ +/*! + * jQuery JavaScript Library v3.4.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2019-05-01T21:04Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML <object> elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.4.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code, options ) { + DOMEval( code, { nonce: options && options.nonce } ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.4 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2019-04-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) && + + // Support: IE 8 only + // Exclude object elements + (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && rdescend.test( selector ) ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = (elem.ownerDocument || elem).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "<a href='' disabled='disabled'></a>" + + "<select disabled='disabled'><option/></select>"; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = "<a href='#'></a>"; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = "<input/>"; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( typeof elem.contentDocument !== "undefined" ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG <use> instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + } ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + // Support: IE 9-11 only + // Also use offsetWidth/offsetHeight for when box sizing is unreliable + // We use getClientRects() to check for hidden/disconnected. + // In those cases, the computed value can be trusted to be border-box + if ( ( !support.boxSizingReliable() && isBorderBox || + val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url, options ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ) + .attr( s.scriptAttrs || {} ) + .prop( { charset: s.scriptCharset, src: s.url } ) + .on( "load error", callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +} ); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } +} ); + + + + +// Support: Safari 8 only +// In Safari 8 documents created via document.implementation.createHTMLDocument +// collapse sibling forms: the second one becomes a child of the first one. +// Because of that, this security measure has to be disabled in Safari 8. +// https://bugs.webkit.org/show_bug.cgi?id=137337 +support.createHTMLDocument = ( function() { + var body = document.implementation.createHTMLDocument( "" ).body; + body.innerHTML = "<form></form><form></form>"; + return body.childNodes.length === 2; +} )(); + + +// Argument "data" should be string of html +// context (optional): If specified, the fragment will be created in this context, +// defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( typeof data !== "string" ) { + return []; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + + var base, parsed, scripts; + + if ( !context ) { + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation + if ( support.createHTMLDocument ) { + context = document.implementation.createHTMLDocument( "" ); + + // Set the base href for the created document + // so any parsed elements with URLs + // are based on the document's URL (gh-2965) + base = context.createElement( "base" ); + base.href = document.location.href; + context.head.appendChild( base ); + } else { + context = document; + } + } + + parsed = rsingleTag.exec( data ); + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = stripAndCollapse( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +} ); + + + + +jQuery.expr.pseudos.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; +}; + + + + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend( { + + // offset() relates an element's border box to the document origin + offset: function( options ) { + + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var rect, win, + elem = this[ 0 ]; + + if ( !elem ) { + return; + } + + // Return zeros for disconnected and hidden (display: none) elements (gh-2310) + // Support: IE <=11 only + // Running getBoundingClientRect on a + // disconnected node in IE throws an error + if ( !elem.getClientRects().length ) { + return { top: 0, left: 0 }; + } + + // Get document-relative position by adding viewport scroll to viewport-relative gBCR + rect = elem.getBoundingClientRect(); + win = elem.ownerDocument.defaultView; + return { + top: rect.top + win.pageYOffset, + left: rect.left + win.pageXOffset + }; + }, + + // position() relates an element's margin box to its offset parent's padding box + // This corresponds to the behavior of CSS absolute positioning + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, doc, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // position:fixed elements are offset from the viewport, which itself always has zero offset + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume position:fixed implies availability of getBoundingClientRect + offset = elem.getBoundingClientRect(); + + } else { + offset = this.offset(); + + // Account for the *real* offset parent, which can be the document or its root element + // when a statically positioned element is identified + doc = elem.ownerDocument; + offsetParent = elem.offsetParent || doc.documentElement; + while ( offsetParent && + ( offsetParent === doc.body || offsetParent === doc.documentElement ) && + jQuery.css( offsetParent, "position" ) === "static" ) { + + offsetParent = offsetParent.parentNode; + } + if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { + + // Incorporate borders into its offset, since they are outside its content origin + parentOffset = jQuery( offsetParent ).offset(); + parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); + } + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + + // Coalesce documents and windows + var win; + if ( isWindow( elem ) ) { + win = elem; + } else if ( elem.nodeType === 9 ) { + win = elem.defaultView; + } + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari <=7 - 9.1, Chrome <=37 - 49 +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +} ); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( isWindow( elem ) ) { + + // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) + return funcName.indexOf( "outer" ) === 0 ? + elem[ "inner" + name ] : + elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable ); + }; + } ); +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + } +} ); + +// Bind a function to a context, optionally partially applying any +// arguments. +// jQuery.proxy is deprecated to promote standards (specifically Function#bind) +// However, it is not slated for removal any time soon +jQuery.proxy = function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; +}; + +jQuery.holdReady = function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } +}; +jQuery.isArray = Array.isArray; +jQuery.parseJSON = JSON.parse; +jQuery.nodeName = nodeName; +jQuery.isFunction = isFunction; +jQuery.isWindow = isWindow; +jQuery.camelCase = camelCase; +jQuery.type = toType; + +jQuery.now = Date.now; + +jQuery.isNumeric = function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); +}; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + } ); +} + + + + +var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; +} ); diff --git a/Documentation/html/_static/jquery.js b/Documentation/html/_static/jquery.js index 644d35e274fd64ddaf6d12af813e820c424176a9..a1c07fd803b5fc9c54f44e31123ae4fa11e134b0 100644 --- a/Documentation/html/_static/jquery.js +++ b/Documentation/html/_static/jquery.js @@ -1,4 +1,2 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k}); diff --git a/Documentation/html/_static/language_data.js b/Documentation/html/_static/language_data.js index 5266fb19ecb24d085a338bdace79a063326b1cff..d2b4ee91b0da7308cf5693804779c7b18c26252a 100644 --- a/Documentation/html/_static/language_data.js +++ b/Documentation/html/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/Documentation/html/_static/searchtools.js b/Documentation/html/_static/searchtools.js index 5ff318066d83f9da7a5a97f34f7d78e1a7696c7c..d11b33a78f794eb29c5c9c1fe3f62e7bf0ae5e98 100644 --- a/Documentation/html/_static/searchtools.js +++ b/Documentation/html/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -36,8 +36,10 @@ if (!Scorer) { // query found in title title: 15, + partialTitle: 7, // query found in terms - term: 5 + term: 5, + partialTerm: 2 }; } @@ -56,6 +58,19 @@ var Search = { _queued_query : null, _pulse_status : -1, + htmlToText : function(htmlString) { + var htmlElement = document.createElement('span'); + htmlElement.innerHTML = htmlString; + $(htmlElement).find('.headerlink').remove(); + docContent = $(htmlElement).find('[role=main]')[0]; + if(docContent === undefined) { + console.warn("Content block not found. Sphinx search tries to obtain it " + + "via '[role=main]'. Could you check your theme or template."); + return ""; + } + return docContent.textContent || docContent.innerText; + }, + init : function() { var params = $.getQueryParameters(); if (params.q) { @@ -120,7 +135,7 @@ var Search = { this.out = $('#search-results'); this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); this.dots = $('<span></span>').appendTo(this.title); - this.status = $('<p style="display: none"></p>').appendTo(this.out); + this.status = $('<p class="search-summary"> </p>').appendTo(this.out); this.output = $('<ul class="search"/>').appendTo(this.out); $('#search-progress').text(_('Preparing search...')); @@ -235,7 +250,8 @@ var Search = { if (results.length) { var item = results.pop(); var listItem = $('<li style="display:none"></li>'); - if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') { + var requestUrl = ""; + if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { // dirhtml builder var dirname = item[0] + '/'; if (dirname.match(/\/index\/$/)) { @@ -243,15 +259,15 @@ var Search = { } else if (dirname == 'index/') { dirname = ''; } - listItem.append($('<a/>').attr('href', - DOCUMENTATION_OPTIONS.URL_ROOT + dirname + - highlightstring + item[2]).html(item[1])); + requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname; + } else { // normal html builders - listItem.append($('<a/>').attr('href', - item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + - highlightstring + item[2]).html(item[1])); + requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX; } + listItem.append($('<a/>').attr('href', + requestUrl + + highlightstring + item[2]).html(item[1])); if (item[3]) { listItem.append($('<span> (' + item[3] + ')</span>')); Search.output.append(listItem); @@ -259,11 +275,7 @@ var Search = { displayNextItem(); }); } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { - var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX; - if (suffix === undefined) { - suffix = '.txt'; - } - $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix), + $.ajax({url: requestUrl, dataType: "text", complete: function(jqxhr, textstatus) { var data = jqxhr.responseText; @@ -313,12 +325,13 @@ var Search = { for (var prefix in objects) { for (var name in objects[prefix]) { var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { + var fullnameLower = fullname.toLowerCase() + if (fullnameLower.indexOf(object) > -1) { var score = 0; - var parts = fullname.split('.'); + var parts = fullnameLower.split('.'); // check for different match types: exact matches of full name or // "last name" (i.e. last dotted part) - if (fullname == object || parts[parts.length - 1] == object) { + if (fullnameLower == object || parts[parts.length - 1] == object) { score += Scorer.objNameMatch; // matches in last name } else if (parts[parts.length - 1].indexOf(object) > -1) { @@ -385,6 +398,19 @@ var Search = { {files: terms[word], score: Scorer.term}, {files: titleterms[word], score: Scorer.title} ]; + // add support for partial matches + if (word.length > 2) { + for (var w in terms) { + if (w.match(word) && !terms[word]) { + _o.push({files: terms[w], score: Scorer.partialTerm}) + } + } + for (var w in titleterms) { + if (w.match(word) && !titleterms[word]) { + _o.push({files: titleterms[w], score: Scorer.partialTitle}) + } + } + } // no match but word was a required one if ($u.every(_o, function(o){return o.files === undefined;})) { @@ -404,7 +430,7 @@ var Search = { for (j = 0; j < _files.length; j++) { file = _files[j]; if (!(file in scoreMap)) - scoreMap[file] = {} + scoreMap[file] = {}; scoreMap[file][word] = o.score; } }); @@ -412,7 +438,7 @@ var Search = { // create the mapping for (j = 0; j < files.length; j++) { file = files[j]; - if (file in fileMap) + if (file in fileMap && fileMap[file].indexOf(word) === -1) fileMap[file].push(word); else fileMap[file] = [word]; @@ -424,8 +450,12 @@ var Search = { var valid = true; // check if all requirements are matched - if (fileMap[file].length != searchterms.length) - continue; + var filteredTermCount = // as search terms with length < 3 are discarded: ignore + searchterms.filter(function(term){return term.length > 2}).length + if ( + fileMap[file].length != searchterms.length && + fileMap[file].length != filteredTermCount + ) continue; // ensure that none of the excluded terms is in the search result for (i = 0; i < excluded.length; i++) { @@ -456,7 +486,8 @@ var Search = { * words. the first one is used to find the occurrence, the * latter for highlighting it. */ - makeSearchSummary : function(text, keywords, hlwords) { + makeSearchSummary : function(htmlText, keywords, hlwords) { + var text = Search.htmlToText(htmlText); var textLower = text.toLowerCase(); var start = 0; $.each(keywords, function() { diff --git a/Documentation/html/authors.html b/Documentation/html/authors.html index fbd0d8640aaf3c70ddfc18861a374ab2ffd7efd5..763a5e0daa04ab2bc7a56e92c0aa2d7e2aa532a8 100644 --- a/Documentation/html/authors.html +++ b/Documentation/html/authors.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -205,7 +205,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/changelog.html b/Documentation/html/changelog.html index 58099ffd2b0838a0707b554918cfae57ba2bb605..9f06cd876f3220cb586100c6178aa2d01f2a34b9 100644 --- a/Documentation/html/changelog.html +++ b/Documentation/html/changelog.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -96,6 +96,10 @@ <li class="toctree-l1"><a class="reference internal" href="evaluation.html">Evaluation</a></li> <li class="toctree-l1"><a class="reference internal" href="dev_guide.html">Developer Guide</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Changelog</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#release-v7-1-1">Release v7.1.1</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#bug-fixes">Bug fixes</a></li> +</ul> +</li> <li class="toctree-l2"><a class="reference internal" href="#release-v7-1">Release v7.1</a><ul> <li class="toctree-l3"><a class="reference internal" href="#new-features">New Features</a></li> <li class="toctree-l3"><a class="reference internal" href="#changes">Changes</a></li> @@ -103,16 +107,16 @@ </li> <li class="toctree-l2"><a class="reference internal" href="#release-v7-0-4">Release v7.0.4</a><ul> <li class="toctree-l3"><a class="reference internal" href="#id1">New Features</a></li> -<li class="toctree-l3"><a class="reference internal" href="#bug-fixes">Bug fixes</a></li> +<li class="toctree-l3"><a class="reference internal" href="#id2">Bug fixes</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#release-v7-0-3">Release v7.0.3</a><ul> -<li class="toctree-l3"><a class="reference internal" href="#id2">New Features</a></li> +<li class="toctree-l3"><a class="reference internal" href="#id3">New Features</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#release-v7-0-2">Release v7.0.2</a><ul> -<li class="toctree-l3"><a class="reference internal" href="#id3">New Features</a></li> -<li class="toctree-l3"><a class="reference internal" href="#id4">Changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="#id4">New Features</a></li> +<li class="toctree-l3"><a class="reference internal" href="#id5">Changes</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#release-v0-1-v6-0">Release v0.1 - v6.0</a></li> @@ -189,18 +193,31 @@ <h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline">¶</a></h1> <div class="toctree-wrapper compound"> </div> +<div class="section" id="release-v7-1-1"> +<span id="ref-v711"></span><h2>Release v7.1.1<a class="headerlink" href="#release-v7-1-1" title="Permalink to this headline">¶</a></h2> +<div class="section" id="bug-fixes"> +<h3>Bug fixes<a class="headerlink" href="#bug-fixes" title="Permalink to this headline">¶</a></h3> +<blockquote> +<div><ul class="simple"> +<li><p>corrected naming of makefiles and Fortran program executable in online documentation</p></li> +<li><p>adapted checking for <code class="docutils literal notranslate"><span class="pre">GATEWAY</span></code> and <code class="docutils literal notranslate"><span class="pre">DESTINATION</span></code> parameter</p></li> +<li><p>fixed makefiles to use f90 Fortran files for ECMWF server</p></li> +</ul> +</div></blockquote> +</div> +</div> <div class="section" id="release-v7-1"> <span id="ref-v71"></span><h2>Release v7.1<a class="headerlink" href="#release-v7-1" title="Permalink to this headline">¶</a></h2> <div class="section" id="new-features"> <h3>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>first set of UNIT tests</li> -<li>first set of regression tests</li> -<li>structured documentation with Sphinx</li> -<li>local retrieval via <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a> for ERA 5 data</li> -<li>simplified installation process</li> -<li>disaggregation of precipitation with a <a class="reference external" href="https://www.geosci-model-dev.net/11/2503/2018/">new algorithm</a></li> +<li><p>first set of UNIT tests</p></li> +<li><p>first set of regression tests</p></li> +<li><p>structured documentation with Sphinx</p></li> +<li><p>local retrieval via <a class="reference external" href="https://cds.climate.copernicus.eu/api-how-to">CDS API</a> for ERA 5 data</p></li> +<li><p>simplified installation process</p></li> +<li><p>disaggregation of precipitation with a <a class="reference external" href="https://www.geosci-model-dev.net/11/2503/2018/">new algorithm</a></p></li> </ul> </div></blockquote> </div> @@ -208,13 +225,14 @@ <h3>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>upgraded to Python3</li> -<li>applied PEP8 style guide</li> -<li>use of genshi templates</li> -<li>modularization of python source code</li> -<li>upgrade from grib_api to ecCodes</li> -<li>completely revised/refactored python section</li> -<li>restructured program directories</li> +<li><p>upgraded to Python3</p></li> +<li><p>applied PEP8 style guide</p></li> +<li><p>use of genshi templates</p></li> +<li><p>modularization of python source code</p></li> +<li><p>upgrade from grib_api to ecCodes</p></li> +<li><p>completely revised/refactored python section</p></li> +<li><p>restructured program directories</p></li> +<li><p>Fortran program name changed from <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> to <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code></p></li> </ul> </div></blockquote> </div> @@ -225,54 +243,54 @@ <h3>New Features<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>Ensemble retrieval for ENFO and ELDA stream (ZAMG specific with extra synthesized ensembles for ELDA stream)</li> +<li><p>Ensemble retrieval for ENFO and ELDA stream (ZAMG specific with extra synthesized ensembles for ELDA stream)</p></li> </ul> </div></blockquote> </div> -<div class="section" id="bug-fixes"> -<h3>Bug fixes<a class="headerlink" href="#bug-fixes" title="Permalink to this headline">¶</a></h3> +<div class="section" id="id2"> +<h3>Bug fixes<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>diverse problems with ERA 5 retrieval</li> -<li>diverse problems with CERA-20C retrieval</li> -<li>BASETIME retrieval option</li> -<li><cite>CONVERT2</cite> FORTRAN program: initialise fields to 0. +<li><p>diverse problems with ERA 5 retrieval</p></li> +<li><p>diverse problems with CERA-20C retrieval</p></li> +<li><p>BASETIME retrieval option</p></li> +<li><p><cite>CONVERT2</cite> FORTRAN program: initialise fields to 0. (introduced initialization of <code class="docutils literal notranslate"><span class="pre">field</span></code> variable in the Fortran program -with <code class="docutils literal notranslate"><span class="pre">field=0.</span></code> in file <code class="docutils literal notranslate"><span class="pre">rwGRIB2.f90</span></code> to avoid getting unreasonable large numbers.)</li> +with <code class="docutils literal notranslate"><span class="pre">field=0.</span></code> in file <code class="docutils literal notranslate"><span class="pre">rwGRIB2.f90</span></code> to avoid getting unreasonable large numbers.)</p></li> </ul> </div></blockquote> </div> </div> <div class="section" id="release-v7-0-3"> <span id="ref-v703"></span><h2>Release v7.0.3<a class="headerlink" href="#release-v7-0-3" title="Permalink to this headline">¶</a></h2> -<div class="section" id="id2"> -<h3>New Features<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3> +<div class="section" id="id3"> +<h3>New Features<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>output of mars requests to an extra file (debugging and documentation)</li> -<li>CERA-20C download</li> -<li>ERA 5 download</li> -<li>public user interface with <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a></li> -<li>use of <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a> for local retrieval version</li> +<li><p>output of mars requests to an extra file (debugging and documentation)</p></li> +<li><p>CERA-20C download</p></li> +<li><p>ERA 5 download</p></li> +<li><p>public user interface with <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a></p></li> +<li><p>use of <a class="reference external" href="https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home">ECMWF Web API</a> for local retrieval version</p></li> </ul> </div></blockquote> </div> </div> <div class="section" id="release-v7-0-2"> <span id="ref-v702"></span><h2>Release v7.0.2<a class="headerlink" href="#release-v7-0-2" title="Permalink to this headline">¶</a></h2> -<div class="section" id="id3"> -<h3>New Features<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3> +<div class="section" id="id4"> +<h3>New Features<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>Python based version</li> +<li><p>Python based version</p></li> </ul> </div></blockquote> </div> -<div class="section" id="id4"> -<h3>Changes<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> +<div class="section" id="id5"> +<h3>Changes<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3> <blockquote> <div><ul class="simple"> -<li>korn shell scripts were substituted by python scripts</li> +<li><p>korn shell scripts were substituted by python scripts</p></li> </ul> </div></blockquote> </div> @@ -281,7 +299,7 @@ with <code class="docutils literal notranslate"><span class="pre">field=0.</span <span id="ref-v60"></span><h2>Release v0.1 - v6.0<a class="headerlink" href="#release-v0-1-v6-0" title="Permalink to this headline">¶</a></h2> <blockquote> <div><ul class="simple"> -<li>old version which should no longer be used anymore</li> +<li><p>old version which should no longer be used anymore</p></li> </ul> </div></blockquote> </div> @@ -307,7 +325,7 @@ with <code class="docutils literal notranslate"><span class="pre">field=0.</span <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/dev_guide.html b/Documentation/html/dev_guide.html index a42ba492c9d5bf05be80802cab725c92a4abc15c..03085d3ee5436e5b83b8ac8142f021f752ef5c0d 100644 --- a/Documentation/html/dev_guide.html +++ b/Documentation/html/dev_guide.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -169,7 +169,12 @@ <div class="section" id="developer-guide"> <h1>Developer Guide<a class="headerlink" href="#developer-guide" title="Permalink to this headline">¶</a></h1> <blockquote> -<div>UNDER CONSTRUCTION</div></blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>This section still needs to be done.</p> +</div> <div class="toctree-wrapper compound"> </div> </div> @@ -194,7 +199,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/documentation.html b/Documentation/html/documentation.html index e7361cba35b5837508f24484ed8812111acc1742..9f2a694106fedcbd5422232f90d174a5eebc6634 100644 --- a/Documentation/html/documentation.html +++ b/Documentation/html/documentation.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -178,17 +178,15 @@ <p>Control & Input Data</p> <p>Output Data (Under construction)</p> <p>Disaggregation of Flux Data (Under construction)</p> -<dl class="docutils"> -<dt>Vertical Coordinate (Under construction)</dt> -<dd><ul class="first last simple"> -<li>Methods (GAUSS, ETA, OMEGA)</li> -<li>CONVERT</li> +<dl class="simple"> +<dt>Vertical Coordinate (Under construction)</dt><dd><ul class="simple"> +<li><p>Methods (GAUSS, ETA, OMEGA)</p></li> +<li><p>calc_etadot</p></li> </ul> </dd> -<dt>Auto Generated Documentation</dt> -<dd><ul class="first last simple"> -<li>Python</li> -<li>Fortran (Under construction)</li> +<dt>Auto Generated Documentation</dt><dd><ul class="simple"> +<li><p>Python</p></li> +<li><p>Fortran (Under construction)</p></li> </ul> </dd> </dl> @@ -217,7 +215,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/ecmwf_data.html b/Documentation/html/ecmwf_data.html index 81700eb026b18bc45caba2cd53f4d4ffdc7cf886..d43e95840e5388be8f07362c2ee3a2a15d528811 100644 --- a/Documentation/html/ecmwf_data.html +++ b/Documentation/html/ecmwf_data.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -176,18 +176,18 @@ <p>The amount and structure of the available data from ECMWF is very complex. The operational data changes regularly in time and spatial resolution, physics and parameter. This has to be taken into account carefully and each user has to investigate his dataset of interest carefully before selecting and retrieving it with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. The re-analysis datasets are consistent in all the above mentioned topics over their whole period but they have each their own specialities which makes treatment with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> special in some way. For example, they have different starting times for their forecasts or different parameter availability. They also have differences in time and spatial resolution and most importantly for <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> they are different in the way of providing the vertical coordinate.</p> <p>There is much to learn from ECMWF and their datasets and data handling and this might be confusing at first. We therefore collected the most important information for <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> users. In the following sections the user can use them to get to know enough to understand how <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is best used and to select the parameters of the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files.</p> -<dl class="docutils"> -<dt><a class="reference internal" href="Ecmwf/access.html"><span class="doc">Access Modes</span></a></dt> -<dd>Description of available access methods to the ECMWF data.</dd> -<dt><a class="reference internal" href="Ecmwf/msdata.html"><span class="doc">Available Datasets for Member State users</span></a></dt> -<dd>Information about available data and parameters for member state users which can be retrieved with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></dd> -<dt><a class="reference internal" href="Ecmwf/pubdata.html"><span class="doc">Available Datasets for Public users</span></a></dt> -<dd>Information about available data and parameters for the public datasets which can be retrieved with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></dd> -<dt><a class="reference internal" href="Ecmwf/hintsecmwf.html"><span class="doc">Hints to specify dataset retrieval</span></a></dt> -<dd>Collection of hints to best find information to define the dataset for retrievement and -to define the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files.</dd> -<dt><a class="reference internal" href="Ecmwf/ec-links.html"><span class="doc">Link Collection for Quick finder</span></a></dt> -<dd>Link collection for additional and useful information as well as references to specific dataset publications.</dd> +<dl class="simple"> +<dt><a class="reference internal" href="Ecmwf/access.html"><span class="doc">Access Modes</span></a></dt><dd><p>Description of available access methods to the ECMWF data.</p> +</dd> +<dt><a class="reference internal" href="Ecmwf/msdata.html"><span class="doc">Available Datasets for Member State users</span></a></dt><dd><p>Information about available data and parameters for member state users which can be retrieved with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></p> +</dd> +<dt><a class="reference internal" href="Ecmwf/pubdata.html"><span class="doc">Available Datasets for Public users</span></a></dt><dd><p>Information about available data and parameters for the public datasets which can be retrieved with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code></p> +</dd> +<dt><a class="reference internal" href="Ecmwf/hintsecmwf.html"><span class="doc">Hints to specify dataset retrieval</span></a></dt><dd><p>Collection of hints to best find information to define the dataset for retrievement and +to define the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files.</p> +</dd> +<dt><a class="reference internal" href="Ecmwf/ec-links.html"><span class="doc">Link Collection for Quick finder</span></a></dt><dd><p>Link collection for additional and useful information as well as references to specific dataset publications.</p> +</dd> </dl> <div class="toctree-wrapper compound"> </div> @@ -213,7 +213,7 @@ to define the <code class="docutils literal notranslate"><span class="pre">CONTR <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/evaluation.html b/Documentation/html/evaluation.html index 7924c0b2c1087a772691f7afa9004031b9756c79..8f3905e41bf650ec488515e986587a82df29bf3f 100644 --- a/Documentation/html/evaluation.html +++ b/Documentation/html/evaluation.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -171,7 +171,13 @@ <div class="section" id="evaluation"> <h1>Evaluation<a class="headerlink" href="#evaluation" title="Permalink to this headline">¶</a></h1> <blockquote> -<div>UNDER CONSTRUCTION</div></blockquote> +<div><p>UNDER CONSTRUCTION</p> +</div></blockquote> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>This section in the online documentation still needs to be done. +Currently, evaluation methods and information can be found in the <a class="reference external" href="https://www.geosci-model-dev-discuss.net/gmd-2019-358/">flex_extract discussion paper</a> of the Geoscientific Model Development journal.</p> +</div> <div class="toctree-wrapper compound"> </div> </div> @@ -196,7 +202,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/genindex.html b/Documentation/html/genindex.html index f9cdf0f9c9c6a3b275bcb641c9ad444f8568b8ce..995ea9ee1609c3557a5db7b60bb78362a118fafb 100644 --- a/Documentation/html/genindex.html +++ b/Documentation/html/genindex.html @@ -22,11 +22,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -856,7 +856,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/index.html b/Documentation/html/index.html index 2e66024a844acf4f7f2d59a0b6386798f241774a..9802a9e1b867600d0ed2931fc7a3a0f68c229f23 100644 --- a/Documentation/html/index.html +++ b/Documentation/html/index.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -180,7 +180,7 @@ </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/ecmwf_icon.png"> </div> <h2><a href="ecmwf_data.html">ECMWF data</a></h2> <ul> @@ -215,7 +215,7 @@ </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/check_icon.png"> </div> <h2><a href="evaluation.html">Evaluation</a></h2> <ul> @@ -226,7 +226,7 @@ </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/guide_icon.png"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/dev_icon.png"> </div> <h2><a href="dev_guide.html">Developer</a></h2> <ul> @@ -247,10 +247,10 @@ </div> <h2><a href="changelog.html">Changelog</a></h2> <ul> + <li><a href="changelog.html#ref-v711">v7.1.1</a></li> <li><a href="changelog.html#ref-v71">v7.1</a></li> <li><a href="changelog.html#ref-v704">v7.0.4</a></li> <li><a href="changelog.html#ref-v703">v7.0.3</a></li> - <li><a href="changelog.html#ref-v60">v6</a></li> </ul> </td> <td style="width:30%;height:150px;"> @@ -270,11 +270,11 @@ </tr> </table> <p></p><div class="admonition note"> -<p class="first admonition-title">Note</p> -<div class="figure"> +<p class="admonition-title">Note</p> +<div class="figure align-default"> <a class="reference internal image-reference" href="_images/cc-by-40.png"><img alt="_images/cc-by-40.png" src="_images/cc-by-40.png" style="width: 100px;" /></a> </div> -<p class="last">This work is licensed under the Creative Commons Attribution 4.0 +<p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit <a class="reference external" href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</a> or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> @@ -319,6 +319,10 @@ Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> <li class="toctree-l1"><a class="reference internal" href="evaluation.html">Evaluation</a></li> <li class="toctree-l1"><a class="reference internal" href="dev_guide.html">Developer Guide</a></li> <li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a><ul> +<li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v7-1-1">Release v7.1.1</a><ul> +<li class="toctree-l3"><a class="reference internal" href="changelog.html#bug-fixes">Bug fixes</a></li> +</ul> +</li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v7-1">Release v7.1</a><ul> <li class="toctree-l3"><a class="reference internal" href="changelog.html#new-features">New Features</a></li> <li class="toctree-l3"><a class="reference internal" href="changelog.html#changes">Changes</a></li> @@ -326,16 +330,16 @@ Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> </li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v7-0-4">Release v7.0.4</a><ul> <li class="toctree-l3"><a class="reference internal" href="changelog.html#id1">New Features</a></li> -<li class="toctree-l3"><a class="reference internal" href="changelog.html#bug-fixes">Bug fixes</a></li> +<li class="toctree-l3"><a class="reference internal" href="changelog.html#id2">Bug fixes</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v7-0-3">Release v7.0.3</a><ul> -<li class="toctree-l3"><a class="reference internal" href="changelog.html#id2">New Features</a></li> +<li class="toctree-l3"><a class="reference internal" href="changelog.html#id3">New Features</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v7-0-2">Release v7.0.2</a><ul> -<li class="toctree-l3"><a class="reference internal" href="changelog.html#id3">New Features</a></li> -<li class="toctree-l3"><a class="reference internal" href="changelog.html#id4">Changes</a></li> +<li class="toctree-l3"><a class="reference internal" href="changelog.html#id4">New Features</a></li> +<li class="toctree-l3"><a class="reference internal" href="changelog.html#id5">Changes</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-v0-1-v6-0">Release v0.1 - v6.0</a></li> @@ -376,7 +380,7 @@ Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/installation.html b/Documentation/html/installation.html index 5793d5885495c8ca5b8c99276c6202eafe2672da..98aaec065a57693a8c5fa9e228a23d291d40176b 100644 --- a/Documentation/html/installation.html +++ b/Documentation/html/installation.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -188,63 +188,63 @@ <p>The <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> software package contains python and shell scripts as well as a Fortran program. These components rely on several libraries which need to be available before starting the installation process. Currently, the software is only tested for a GNU/Linux environment. Feel free to try it out on other platforms.</p> <p>At first, go to the <a class="reference external" href="Ecmwf/access.html">user group</a> section and decide which group you belong to and follow the instructions at <a class="reference internal" href="#ref-registration"><span class="std std-ref">Registration at ECMWF</span></a> to obtain an account at ECMWF (if you don’t have it already). Depending on the user group and the way to access the ECWMF MARS archive, there are four possible <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a>:</p> <ul class="simple"> -<li>Remote (member-state users only) <a class="reference internal" href="Installation/remote.html#ref-remote-mode"><span class="std std-ref">[installation]</span></a></li> -<li>Gateway (member-state users only) <a class="reference internal" href="Installation/gateway.html#ref-gateway-mode"><span class="std std-ref">[installation]</span></a></li> -<li>Local, member-state user <a class="reference internal" href="Installation/local.html#ref-local-mode"><span class="std std-ref">[installation]</span></a></li> -<li>Local, public user <a class="reference internal" href="Installation/local.html#ref-local-mode"><span class="std std-ref">[installation]</span></a></li> +<li><p>Remote (member-state users only) <a class="reference internal" href="Installation/remote.html#ref-remote-mode"><span class="std std-ref">[installation]</span></a></p></li> +<li><p>Gateway (member-state users only) <a class="reference internal" href="Installation/gateway.html#ref-gateway-mode"><span class="std std-ref">[installation]</span></a></p></li> +<li><p>Local, member-state user <a class="reference internal" href="Installation/local.html#ref-local-mode"><span class="std std-ref">[installation]</span></a></p></li> +<li><p>Local, public user <a class="reference internal" href="Installation/local.html#ref-local-mode"><span class="std std-ref">[installation]</span></a></p></li> </ul> <p>Please follow the link <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> to get a description of the modes.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">If you encounter any problems in the installation process, you can ask for <a class="reference internal" href="support.html"><span class="doc">Support</span></a>.</p> +<p class="admonition-title">Note</p> +<p>If you encounter any problems in the installation process, you can ask for <a class="reference internal" href="support.html"><span class="doc">Support</span></a>.</p> </div> <div class="section" id="registration-at-ecmwf"> <span id="ref-registration"></span><h2>Registration at ECMWF<a class="headerlink" href="#registration-at-ecmwf" title="Permalink to this headline">¶</a></h2> <p>The registration depends on the <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> and in case of the local mode also on the data set you’d like to retrieve. The following table gives an overview where you need to register.</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="23%" /> -<col width="15%" /> -<col width="16%" /> -<col width="24%" /> -<col width="23%" /> +<col style="width: 23%" /> +<col style="width: 15%" /> +<col style="width: 16%" /> +<col style="width: 24%" /> +<col style="width: 23%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td rowspan="2">Data sets</td> -<td colspan="3">Member-state user</td> -<td>Public user</td> +<tbody> +<tr class="row-odd"><td rowspan="2"><p>Data sets</p></td> +<td colspan="3"><p>Member-state user</p></td> +<td><p>Public user</p></td> </tr> -<tr class="row-even"><td>Remote</td> -<td>Gateway</td> -<td>Local</td> -<td>Local</td> +<tr class="row-even"><td><p>Remote</p></td> +<td><p>Gateway</p></td> +<td><p>Local</p></td> +<td><p>Local</p></td> </tr> -<tr class="row-odd"><td>Operational</td> -<td>1</td> -<td>1</td> -<td>1,2</td> -<td><ul class="first last simple"> +<tr class="row-odd"><td><p>Operational</p></td> +<td><p>1</p></td> +<td><p>1</p></td> +<td><p>1,2</p></td> +<td><ul class="simple"> <li></li> </ul> </td> </tr> -<tr class="row-even"><td>ERA-Interim</td> -<td>1</td> -<td>1</td> -<td>1,2</td> -<td>2</td> +<tr class="row-even"><td><p>ERA-Interim</p></td> +<td><p>1</p></td> +<td><p>1</p></td> +<td><p>1,2</p></td> +<td><p>2</p></td> </tr> -<tr class="row-odd"><td>CERA-20C</td> -<td>1</td> -<td>1</td> -<td>1,2</td> -<td>2</td> +<tr class="row-odd"><td><p>CERA-20C</p></td> +<td><p>1</p></td> +<td><p>1</p></td> +<td><p>1,2</p></td> +<td><p>2</p></td> </tr> -<tr class="row-even"><td>ERA5</td> -<td>1</td> -<td>1</td> -<td>3</td> -<td><ul class="first last simple"> +<tr class="row-even"><td><p>ERA5</p></td> +<td><p>1</p></td> +<td><p>1</p></td> +<td><p>3</p></td> +<td><ul class="simple"> <li></li> </ul> </td> @@ -267,16 +267,14 @@ <div class="section" id="download-flex-extract"> <span id="ref-download"></span><h2>Download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code><a class="headerlink" href="#download-flex-extract" title="Permalink to this headline">¶</a></h2> <p>There are two options to download <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>:</p> -<dl class="docutils"> -<dt>tar ball</dt> -<dd><p class="first">You can download a tar ball with the latest release from the <a class="reference external" href="https://www.flexpart.eu/wiki/FpInputMetEcmwf">flex_extract page</a> from our <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> community website and then untar the file.</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>tar -xvf <flex_extract_vX.X.tar> +<dl> +<dt>tar ball</dt><dd><p>You can download a tar ball with the latest release from the <a class="reference external" href="https://www.flexpart.eu/wiki/FpInputMetEcmwf">flex_extract page</a> from our <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> community website and then untar the file.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>tar -xvf <flex_extract_vX.X.tar> </pre></div> </div> </dd> -<dt>git repo</dt> -<dd><p class="first">Alternatively, if you have <code class="docutils literal notranslate"><span class="pre">git</span></code> installed on your machine, and if you are interested to keep the code in a version control system, you may clone the latest version from our git repository master branch.</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flexpart +<dt>git repo</dt><dd><p>Alternatively, if you have <code class="docutils literal notranslate"><span class="pre">git</span></code> installed on your machine, and if you are interested to keep the code in a version control system, you may clone the latest version from our git repository master branch.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flex_extract </pre></div> </div> </dd> @@ -318,25 +316,20 @@ installation has to be done. At the users local side not all software has to be <span id="ref-testinstallfe"></span><h2>Test installation<a class="headerlink" href="#test-installation" title="Permalink to this headline">¶</a></h2> <div class="section" id="fortran-program-test"> <h3>Fortran program test<a class="headerlink" href="#fortran-program-test" title="Permalink to this headline">¶</a></h3> -<p>To check whether the Fortran program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code> has been compiled and runs properly, it can be applied to a prepared minimal dataset.</p> +<p>To check whether the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code> has been compiled and runs properly, it can be applied to a prepared minimal dataset.</p> <p>For this, go from the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory to the <code class="docutils literal notranslate"><span class="pre">Testing/Installation/Convert/</span></code> directory and execute the Fortran program.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Remember that you might have to log in at the ECMWF server if you used the installation for the <strong>remote</strong> or <strong>gateway</strong> mode. There you find the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory in your <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory.</p> +<p class="admonition-title">Note</p> +<p>Remember that you might have to log in at the ECMWF server if you used the installation for the <strong>remote</strong> or <strong>gateway</strong> mode. There you find the <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> root directory in your <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory.</p> </div> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> Testing/Installation/Convert <span class="c1"># execute the Fortran progam without arguments</span> -../../../Source/Fortran/CONVERT2 +../../../Source/Fortran/calc_etadot </pre></div> </div> <p>The installation was successfull if you obtain on standard output:</p> -<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span> readspectral: <span class="m">1</span> records <span class="nb">read</span> - readlatlon: <span class="m">8</span> records <span class="nb">read</span> -STATISTICS: <span class="m">98842</span>.4598 <span class="m">98709</span>.7359 <span class="m">5120</span>.5385 - readlatlon: <span class="m">4</span> records <span class="nb">read</span> - readlatlon: <span class="m">4</span> records <span class="nb">read</span> - readlatlon: <span class="m">4</span> records <span class="nb">read</span> -SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>STATISTICS: <span class="m">98842</span>.4598 <span class="m">98709</span>.7359 <span class="m">5120</span>.5385 +STOP SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS </pre></div> </div> <p>Now go back to the root directory:</p> @@ -347,7 +340,8 @@ SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS <div class="section" id="full-test"> <h3>Full test<a class="headerlink" href="#full-test" title="Permalink to this headline">¶</a></h3> <blockquote> -<div>see <a class="reference internal" href="quick_start.html"><span class="doc">Quick Start</span></a></div></blockquote> +<div><p>see <a class="reference internal" href="quick_start.html"><span class="doc">Quick Start</span></a></p> +</div></blockquote> </div> </div> </div> @@ -372,7 +366,7 @@ SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/objects.inv b/Documentation/html/objects.inv index 938e417d63cf7c59359d2df83485773f42a30a76..1db57355f3c1b693f600c9f49330bdce98652e85 100644 Binary files a/Documentation/html/objects.inv and b/Documentation/html/objects.inv differ diff --git a/Documentation/html/py-modindex.html b/Documentation/html/py-modindex.html index cb3f0e96c75f5d024d6680b9ec7c3f96f7cb0d1b..1654e7a908fcc9b5889babd7e98cabb7721a724b 100644 --- a/Documentation/html/py-modindex.html +++ b/Documentation/html/py-modindex.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -40,7 +40,7 @@ <link rel="search" title="Search" href="search.html" /> - <script type="text/javascript"> + <script> DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true; </script> @@ -284,7 +284,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/quick_start.html b/Documentation/html/quick_start.html index 58e68ac5697190566304d604f4bb195952d99bae..971a7148cfacacc390771d54d5ae2a9627dd77f7 100644 --- a/Documentation/html/quick_start.html +++ b/Documentation/html/quick_start.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -206,12 +206,12 @@ </pre></div> </div> <p>The <code class="docutils literal notranslate"><span class="pre">Jobscripts</span></code> directory is used to store the Korn shell job scripts generated by a <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> run in the <strong>Remote</strong> or <strong>Gateway</strong> mode. They are used to submit the setup information to the ECMWF server and start the jobs in ECMWF’s batch mode. The typical user must not touch these files. They will be generated from template files which are stored in the <code class="docutils literal notranslate"><span class="pre">Templates</span></code> directory under <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X</span></code>. Usually there will be a <code class="docutils literal notranslate"><span class="pre">compilejob.ksh</span></code> and a <code class="docutils literal notranslate"><span class="pre">job.ksh</span></code> script which are explained in the section <a class="reference internal" href="Documentation/input.html"><span class="doc">Control & Input Data</span></a>. In the rare case of operational data extraction there will be a <code class="docutils literal notranslate"><span class="pre">joboper.ksh</span></code> which is designed to get the time parameters from environment variables at the ECMWF servers.</p> -<p>The <code class="docutils literal notranslate"><span class="pre">Controls</span></code> directory contains a number of example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files. These``CONTROL`` files represent the current range of possible dataset retrievals with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. Some parameters in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files can be adapted and some others should not be changed. In this <a class="reference internal" href="#"><span class="doc">Quick Start</span></a> guide we explain how an extraction with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> can be started in the different <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> and point out some specifics of each dataset and <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</p> +<p>The <code class="docutils literal notranslate"><span class="pre">Controls</span></code> directory contains a number of example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files. These <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files represent the current range of possible dataset retrievals with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>. Some parameters in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files can be adapted and some others should not be changed. In this <a class="reference internal" href="#"><span class="doc">Quick Start</span></a> guide we explain how an extraction with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> can be started in the different <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> and point out some specifics of each dataset and <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file.</p> <p>Directly under <code class="docutils literal notranslate"><span class="pre">Run</span></code> you find the files <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> and <code class="docutils literal notranslate"><span class="pre">run_local.sh</span></code> and according to your selected <a class="reference internal" href="Documentation/Overview/app_modes.html"><span class="doc">Application Modes</span></a> there might also be a file named <code class="docutils literal notranslate"><span class="pre">ECMWF_ENV</span></code> for the user credentials to quickly and automatically access ECMWF servers.</p> <p>From version 7.1 on, the <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> (or <code class="docutils literal notranslate"><span class="pre">run_local.sh</span></code>) script is the main access point to <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Note that, for experienced users (or users of older versions), it is still possible to access <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directly via the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script which can be found in the directory <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Python</span></code>.</p> +<p class="admonition-title">Note</p> +<p>Note that, for experienced users (or users of older versions), it is still possible to access <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> directly via the <code class="docutils literal notranslate"><span class="pre">submit.py</span></code> script which can be found in the directory <code class="docutils literal notranslate"><span class="pre">flex_extract_vX.X/Source/Python</span></code>.</p> </div> <div class="section" id="job-preparation"> <h2>Job preparation<a class="headerlink" href="#job-preparation" title="Permalink to this headline">¶</a></h2> @@ -219,22 +219,20 @@ <div class="section" id="remote-and-gateway-modes"> <h3>Remote and gateway modes<a class="headerlink" href="#remote-and-gateway-modes" title="Permalink to this headline">¶</a></h3> <p>For member state users it is recommended to use the <em>remote</em> or <em>gateway</em> mode, especially for more demanding tasks, to retrieve and convert data on ECMWF machines and to transfer only the final output files to the local host.</p> -<dl class="docutils"> -<dt>Remote mode</dt> -<dd><p class="first">The only difference between both modes is the users working location. In the <em>remote</em> mode you have to login to the ECMWF server and then go to the <code class="docutils literal notranslate"><span class="pre">Run</span></code> directory as shown above. At ECMWF servers <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory. However, to be able to start the program you have to load the <code class="docutils literal notranslate"><span class="pre">Python3</span></code> environment with the module system first.</p> +<dl> +<dt>Remote mode</dt><dd><p>The only difference between both modes is the users working location. In the <em>remote</em> mode you have to login to the ECMWF server and then go to the <code class="docutils literal notranslate"><span class="pre">Run</span></code> directory as shown above. At ECMWF servers <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> is installed in the <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> directory. However, to be able to start the program you have to load the <code class="docutils literal notranslate"><span class="pre">Python3</span></code> environment with the module system first.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Remote mode</span> ssh -X <ecuid>@ecaccess.ecmwf.int </pre></div> </div> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># On ECMWF server</span> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># On ECMWF server</span> <span class="o">[</span><ecuid>@ecgb11 ~<span class="o">]</span>$ module load python3 <span class="o">[</span><ecuid>@ecgb11 ~<span class="o">]</span>$ <span class="nb">cd</span> flex_extract_vX.X/Run </pre></div> </div> </dd> -<dt>Gateway mode</dt> -<dd><p class="first">For the gateway mode you have to log in on the gateway server and go to the <code class="docutils literal notranslate"><span class="pre">Run</span></code> directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>:</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Gateway mode</span> +<dt>Gateway mode</dt><dd><p>For the gateway mode you have to log in on the gateway server and go to the <code class="docutils literal notranslate"><span class="pre">Run</span></code> directory of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code>:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Gateway mode</span> ssh <user>@<gatewayserver> <span class="nb">cd</span> <path-to-flex_extract_vX.X>/Run </pre></div> @@ -298,23 +296,23 @@ ls -rthl </pre></div> </div> </div> -<p>If the job was submitted to the HPC ( <code class="docutils literal notranslate"><span class="pre">queue=cca</span></code> ) you may login to the HPC and look into the directory <code class="docutils literal notranslate"><span class="pre">/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove</span></code> for job logs. The working directories are deleted after job failure and thus normally cannot be accessed.</p> +<p>If the job was submitted to the HPC ( <code class="docutils literal notranslate"><span class="pre">queue=cca</span></code> or <code class="docutils literal notranslate"><span class="pre">queue=ccb</span></code> ) you may login to the HPC and look into the directory <code class="docutils literal notranslate"><span class="pre">/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove</span></code> for job logs. The working directories are deleted after job failure and thus normally cannot be accessed.</p> <p>To check if the resulting files are still transferred to local gateway server you can use the command <code class="docutils literal notranslate"><span class="pre">ecaccess-ectrans-list</span></code> or check the destination path for resulting files on your local gateway server.</p> </div> <div class="section" id="local-mode"> <h3>Local mode<a class="headerlink" href="#local-mode" title="Permalink to this headline">¶</a></h3> <p>To get to know the working process and to start your first submission you could use one of the example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files stored in the <code class="docutils literal notranslate"><span class="pre">Control</span></code> directory as they are. For quick results and for testing reasons it is recommended to extract <em>CERA-20C</em> data.</p> <p>Open the <code class="docutils literal notranslate"><span class="pre">run_local.sh</span></code> file and modify the parameter block marked in the file as shown below. The differences are highlighted.</p> -<table border="1" class="docutils"> +<table class="docutils align-default"> <colgroup> -<col width="50%" /> -<col width="50%" /> +<col style="width: 50%" /> +<col style="width: 50%" /> </colgroup> -<tbody valign="top"> -<tr class="row-odd"><td>Take this for <strong>member-state user</strong></td> -<td>Take this for <strong>public user</strong></td> +<tbody> +<tr class="row-odd"><td><p>Take this for <strong>member-state user</strong></p></td> +<td><p>Take this for <strong>public user</strong></p></td> </tr> -<tr class="row-even"><td><div class="first last highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -----------------------------------------</span> +<tr class="row-even"><td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -----------------------------------------</span> <span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> <span class="c1">#</span> <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETERs:</span> @@ -340,7 +338,7 @@ ls -rthl </span></pre></div> </div> </td> -<td><div class="first last highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -----------------------------------------</span> +<td><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># -----------------------------------------</span> <span class="c1"># AVAILABLE COMMANDLINE ARGUMENTS TO SET</span> <span class="c1">#</span> <span class="c1"># THE USER HAS TO SPECIFY THESE PARAMETERs:</span> @@ -377,8 +375,8 @@ ls -rthl <p>While job submission on the local host is convenient and easy to monitor (on standard output), there are a few caveats with this option:</p> <blockquote> <div><ol class="arabic simple"> -<li>There is a maximum size of 20GB for single retrieval via ECMWF Web API. Normally this is not a problem but for global fields with T1279 resolution and hourly time steps the limit may already apply.</li> -<li>If the retrieved MARS files are large but the resulting files are relative small (small local domain) then the retrieval to the local host may be inefficient since all data must be transferred via the Internet. This scenario applies most notably if <code class="docutils literal notranslate"><span class="pre">etadot</span></code> has to be calculated via the continuity equation as this requires global fields even if the domain is local. In this case job submission via ecgate might be a better choice. It really depends on the use patterns and also on the internet connection speed.</li> +<li><p>There is a maximum size of 20GB for single retrieval via ECMWF Web API. Normally this is not a problem but for global fields with T1279 resolution and hourly time steps the limit may already apply.</p></li> +<li><p>If the retrieved MARS files are large but the resulting files are relative small (small local domain) then the retrieval to the local host may be inefficient since all data must be transferred via the Internet. This scenario applies most notably if <code class="docutils literal notranslate"><span class="pre">etadot</span></code> has to be calculated via the continuity equation as this requires global fields even if the domain is local. In this case job submission via ecgate might be a better choice. It really depends on the use patterns and also on the internet connection speed.</p></li> </ol> </div></blockquote> </div> @@ -389,15 +387,14 @@ ls -rthl <p>The limitation of a dataset to be retrieved should be done very cautiously. The datasets can differ in many ways and vary over the time in resolution and parameterisations methods, especially the operational model cycles improves through a lot of changes over the time. If you are not familiar with the data it might be useful or necessary to check for availability of data in ECMWF’s MARS:</p> <blockquote> <div><ul class="simple"> -<li><strong>Public users</strong> can use a web mask to check on data or list available data at this <a class="reference external" href="https://apps.ecmwf.int/datasets/">Public datasets web interface</a>.</li> -<li><strong>Member state users</strong> can check availability of data online in the <a class="reference external" href="https://apps.ecmwf.int/mars-catalogue/">MARS catalogue</a>.</li> +<li><p><strong>Public users</strong> can use a web mask to check on data or list available data at this <a class="reference external" href="https://apps.ecmwf.int/datasets/">Public datasets web interface</a>.</p></li> +<li><p><strong>Member state users</strong> can check availability of data online in the <a class="reference external" href="https://apps.ecmwf.int/mars-catalogue/">MARS catalogue</a>.</p></li> </ul> </div></blockquote> <p>There you can select step by step what data suits your needs. This would be the most straightforeward way of checking for available data and therefore limit the possibility of <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> to fail. The following figure gives an example how the web interface would look like:</p> -<div class="figure" id="ref-fig-mars-catalogue-ss"> +<div class="figure align-default" id="ref-fig-mars-catalogue-ss"> <img alt="_images/MARS_catalogue_snapshot.png" src="_images/MARS_catalogue_snapshot.png" /> </div> -<p>!!!!!!!! ADD HERE ANOTHER SCREENSHOT OF THE PARAMETER SELECTION AREA ( HAS TO BE DONE AT HOME )</p> <p>Additionally, you can find a lot of helpful links to dataset documentations, direct links to specific dataset web catalogues or further general information at the <a class="reference external" href="Ecmwf/ec-links.html">link collection</a> in the ECMWF data section.</p> <p><code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> is specialised to retrieve a limited number of datasets, namely <em>ERA-Interim</em>, <em>CERA-20C</em>, <em>ERA5</em> and <em>HRES (operational data)</em> as well as the <em>ENS (operational data, 15-day forecast)</em>. The limitation relates mainly to the dataset itself, the stream (what kind of forecast or what subset of dataset) and the experiment number. Mostly, the experiment number is equal to <code class="docutils literal notranslate"><span class="pre">1</span></code> to signal that the actual version should be used.</p> <p>The next level of differentiation would be the field type, level type and time period. <code class="docutils literal notranslate"><span class="pre">Flex_extract</span></code> currently only supports the main streams for the re-analysis datasets and provides extraction of different streams for the operational dataset. The possibilities of compositions of dataset and stream selection are represented by the current list of example <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files. You can see this in the naming of the example files:</p> @@ -429,14 +426,13 @@ CONTROL_OD.OPER.FC.twiceaday.3hourly </div> </div> <p>The main differences and features in the datasets are listed in the table shown below:</p> -<div class="figure" id="id5"> -<span id="ref-tab-dataset-cmp"></span><img alt="_images/dataset_cmp_table.png" src="_images/dataset_cmp_table.png" /> -<p class="caption"><span class="caption-text">DO THIS TABLE AGAIN BY HAND!</span></p> +<div class="figure align-default" id="ref-tab-dataset-cmp"> +<img alt="_images/dataset_cmp_table.png" src="_images/dataset_cmp_table.png" /> </div> <p>A common problem for beginners in retrieving ECMWF datasets is the mismatch in the definition of these parameters. For example, if you would like to retrieve operational data before <code class="docutils literal notranslate"><span class="pre">June</span> <span class="pre">25th</span> <span class="pre">2013</span></code> and set the maximum level to <code class="docutils literal notranslate"><span class="pre">137</span></code> you will get an error because this number of levels was first introduced at this effective day. So, be cautious in the combination of space and time resolution as well as the field types which are not available all the time.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Sometimes it might not be clear how specific parameters in the control file must be set in terms of format. Please see the description of the parameters in section <a class="reference external" href="Documentation/Input/control_params.html">CONTROL parameters</a> or have a look at the ECMWF user documentation for <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/MARS+keywords">MARS keywords</a></p> +<p class="admonition-title">Note</p> +<p>Sometimes it might not be clear how specific parameters in the control file must be set in terms of format. Please see the description of the parameters in section <a class="reference external" href="Documentation/Input/control_params.html">CONTROL parameters</a> or have a look at the ECMWF user documentation for <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/MARS+keywords">MARS keywords</a></p> </div> <p>In the following we shortly discuss the main retrieval opportunities of the different datasets and categoize the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files.</p> <div class="section" id="public-datasets"> @@ -449,8 +445,8 @@ CONTROL_EI.public </div> <p>For <em>CERA-20C</em> it seems that there are no differences in the dataset against the full dataset, while the <em>public ERA-Interim</em> has only analysis fields every 6 hour without filling forecasts in between for model levels. Therefore it is only possible to retrieve 6-hourly data for <em>public ERA-Interim</em>.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">In general, <em>ERA5</em> is a public dataset. However, since the model levels are not yet publicly available, it is not possible to retrieve <em>ERA5</em> data to drive the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> model. As soon as this is possible it will be announced at the community website and per newsletter.</p> +<p class="admonition-title">Note</p> +<p>In general, <em>ERA5</em> is a public dataset. However, since the model levels are not yet publicly available, it is not possible to retrieve <em>ERA5</em> data to drive the <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> model. As soon as this is possible it will be announced at the community website and per newsletter.</p> </div> </div> <div class="section" id="cera"> @@ -465,22 +461,18 @@ Another important difference to all other datasets is the forecast starting time The original horizontal resolution is <code class="docutils literal notranslate"><span class="pre">0.28125°</span></code> which needs some caution in the definition of the domain, since the length of the domain in longitude or latitude direction must be an exact multiple of the resolution. It might be easier for users to use <code class="docutils literal notranslate"><span class="pre">0.25</span></code> for the resolution which MARS will automatically interpolate. The forecast starting time is <code class="docutils literal notranslate"><span class="pre">06/18</span> <span class="pre">UTC</span></code> which is important for the flux data. This should be set in the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file via the <code class="docutils literal notranslate"><span class="pre">ACCTIME</span> <span class="pre">06/18</span></code> parameter in correspondence with <code class="docutils literal notranslate"><span class="pre">ACCMAXSTEP</span> <span class="pre">12</span></code> and <code class="docutils literal notranslate"><span class="pre">ACCTYPE</span> <span class="pre">FC</span></code>.</p> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">We know that <em>ERA5</em> also has an ensemble data assimilation system but this is not yet retrievable with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> since the deaccumulation of the flux fields works differently in this stream. Ensemble retrieval for <em>ERA5</em> is a future ToDo.</p> +<p class="admonition-title">Note</p> +<p>We know that <em>ERA5</em> also has an ensemble data assimilation system but this is not yet retrievable with <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> since the deaccumulation of the flux fields works differently in this stream. Ensemble retrieval for <em>ERA5</em> is a future ToDo.</p> </div> </div> <div class="section" id="era-interim"> <h3>ERA-Interim<a class="headerlink" href="#era-interim" title="Permalink to this headline">¶</a></h3> <p>This re-analysis dataset will exceed its end of production at 31st August 2019! -It is then available from 1st January 1979 to 31st August 2019. The <code class="docutils literal notranslate"><span class="pre">etadot</span></code> is not available in this dataset. Therefore <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> must select the <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program <code class="docutils literal notranslate"><span class="pre">CONVERT2</span></code>. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available.</p> -<div class="admonition-todo admonition" id="index-0"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO: please check the complete description and functionality of the CONTROL FILEs</p> -</div> +It is then available from 1st January 1979 to 31st August 2019. The <code class="docutils literal notranslate"><span class="pre">etadot</span></code> is not available in this dataset. Therefore <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> must select the <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program <code class="docutils literal notranslate"><span class="pre">calc_etadot</span></code>. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available.</p> </div> <div class="section" id="operational-data"> <h3>Operational data<a class="headerlink" href="#operational-data" title="Permalink to this headline">¶</a></h3> -<p>This is the real time atmospheric model in high resolution with a 10-day forecast. This means it underwent regular adaptations and improvements over the years. Hence, retrieving data from this dataset needs extra attention in selecting correct settings of parameter. See <a class="reference internal" href="#ref-tab-dataset-cmp"><span class="std std-ref">DO THIS TABLE AGAIN BY HAND!</span></a> for the most important parameters. +<p>This is the real time atmospheric model in high resolution with a 10-day forecast. This means it underwent regular adaptations and improvements over the years. Hence, retrieving data from this dataset needs extra attention in selecting correct settings of parameter. See <span class="xref std std-ref">ref-tab-dataset-cmp</span> for the most important parameters. Nowadays, it is available 1 hourly by filling the gaps of the 6 hourly analysis fields with 1 hourly forecast fields. Since 4th June 2008 the eta coordinate is directly available so that <code class="docutils literal notranslate"><span class="pre">ETA</span></code> should be set to <code class="docutils literal notranslate"><span class="pre">1</span></code> to save computation time. The horizontal resolution can be up to <code class="docutils literal notranslate"><span class="pre">0.1°</span></code> and in combination with <code class="docutils literal notranslate"><span class="pre">137</span></code> vertical levels can lead to troubles in retrieving this high resolution dataset in terms of job duration and quota exceedence. It is recommended to submit such high resolution cases for single day retrievals (see <code class="docutils literal notranslate"><span class="pre">JOB_CHUNK</span></code> parameter in <code class="docutils literal notranslate"><span class="pre">run.sh</span></code> script) to avoid job failures due to exceeding limits.</p> <p><code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> files for normal daily retrievals with a mix of analysis and forecast fields are listed below:</p> @@ -491,75 +483,63 @@ CONTROL_OD.OPER.FC.gauss.highres </pre></div> </div> <p>These files defines the minimum number of parameters necessary to retrieve a daily subset. The setup of field types is optimal and should only be changed if the user understands what he does. The grid, domain and temporal resolution can be changed according to availability.</p> -<div class="admonition-todo admonition" id="index-1"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO - explain the setup with 4V fields! Who can extract it, when would this be useful?</p> -</div> <div class="admonition note"> -<p class="first admonition-title">Note</p> -<p class="last">Please see <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Retrievalefficiency">Information about MARS retrievement</a> to get to know hints about retrieval efficiency and troubleshooting.</p> +<p class="admonition-title">Note</p> +<p>Please see <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Retrievalefficiency">Information about MARS retrievement</a> to get to know hints about retrieval efficiency and troubleshooting.</p> </div> -<dl class="docutils"> -<dt>Pure forecast</dt> -<dd><p class="first">It is possible to retrieve pure forecasts exceeding a day. The forecast period available depends on the date and forecast field type. Please use MARS catalogue to check the availability. Below are some examples for 36 hour forecast of <em>Forecast (FC)</em>, <em>Control forecast (CF)</em> and <em>Calibration/Validation forecast (CV)</em>. +<dl> +<dt>Pure forecast</dt><dd><p>It is possible to retrieve pure forecasts exceeding a day. The forecast period available depends on the date and forecast field type. Please use MARS catalogue to check the availability. Below are some examples for 36 hour forecast of <em>Forecast (FC)</em>, <em>Control forecast (CF)</em> and <em>Calibration/Validation forecast (CV)</em>. The <em>CV</em> field type was only available 3-hourly from 2006 up to 2016. It is recommended to use the <em>CF</em> type since this is available from 1992 (3-hourly) on up to today in 1-hourly temporal resolution. <em>CV</em> and <em>CF</em> field types belong to the <em>Ensemble prediction system (ENFO)</em> which contain 50 ensemble members. Please be aware that in this case it is necessary to set the specific type for flux fields explicitly, otherwise it could select a default value which might be different from what you expect!</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.ENFO.CF.36hours +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.ENFO.CF.36hours CONTROL_OD.ENFO.CV.36hours CONTROL_OD.OPER.FC.36hours </pre></div> </div> </dd> -<dt>Half-day retrievals</dt> -<dd><p class="first">If a forecast for just half a day is wanted it can be done by substituting the analysis fields also by forecast fields as shown in files with <code class="docutils literal notranslate"><span class="pre">twiceaday</span></code> in it. They produce a full day retrieval with pure 12 hour forecasts twice a day. It is also possible to use the operational version which would get the time information from ECMWF’s environmental variables and therefore get the newest forecast per day. This version uses a <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> parameter which tells MARS to extract the exact 12 hours upfront to the selected date. If the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file with <code class="docutils literal notranslate"><span class="pre">basetime</span></code> in the filename is used this can be done for any other date too.</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.OPER.FC.eta.basetime +<dt>Half-day retrievals</dt><dd><p>If a forecast for just half a day is wanted it can be done by substituting the analysis fields also by forecast fields as shown in files with <code class="docutils literal notranslate"><span class="pre">twiceaday</span></code> in it. They produce a full day retrieval with pure 12 hour forecasts twice a day. It is also possible to use the operational version which would get the time information from ECMWF’s environmental variables and therefore get the newest forecast per day. This version uses a <code class="docutils literal notranslate"><span class="pre">BASETIME</span></code> parameter which tells MARS to extract the exact 12 hours upfront to the selected date. If the <code class="docutils literal notranslate"><span class="pre">CONTROL</span></code> file with <code class="docutils literal notranslate"><span class="pre">basetime</span></code> in the filename is used this can be done for any other date too.</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.OPER.FC.eta.basetime CONTROL_OD.OPER.FC.operational CONTROL_OD.OPER.FC.twiceaday.1hourly CONTROL_OD.OPER.FC.twiceaday.3hourly </pre></div> </div> </dd> -<dt>Ensemble members</dt> -<dd><p class="first">The retrieval of ensemble members were already mentioned in the pure forecast section and for <em>CERA-20C</em> data. +<dt>Ensemble members</dt><dd><p>The retrieval of ensemble members were already mentioned in the pure forecast section and for <em>CERA-20C</em> data. In this <code class="docutils literal notranslate"><span class="pre">flex_extract</span></code> version there is an additional possibility to retrieve the <em>Ensemble Long window Data Assimilation (ELDA)</em> stream from the real-time dataset. This model version has (up to May 2019) 25 ensemble members and a control run (<code class="docutils literal notranslate"><span class="pre">number</span> <span class="pre">0</span></code>). Starting from June 2019 it has 50 ensemble members. Therefore we created the possibility to double up the 25 ensemble members (before June 2019) to 50 members by taking the original 25 members from MARS and subtracting 2 times the difference between the member value and the control value. This is done by selecting the parameter <code class="docutils literal notranslate"><span class="pre">DOUBLEELDA</span></code> and set it to <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p> -<div class="last highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.ELDA.FC.eta.ens.double +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>CONTROL_OD.ELDA.FC.eta.ens.double CONTROL_OD.ENFO.PF.ens </pre></div> </div> </dd> </dl> -<div class="admonition-todo admonition" id="index-2"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO: Please tell me why perturbed forecast are possible? Is it because of some user rights? I have no opportunity of retrieve PF data.</p> -</div> </div> <div class="section" id="specific-features"> <h3>Specific features<a class="headerlink" href="#specific-features" title="Permalink to this headline">¶</a></h3> -<dl class="docutils"> -<dt>rrint</dt> -<dd>Decides if the precipitation flux data uses the old (<code class="docutils literal notranslate"><span class="pre">0</span></code>) or new (<code class="docutils literal notranslate"><span class="pre">1</span></code>) disaggregation scheme. See <a class="reference internal" href="Documentation/disagg.html"><span class="doc">Disaggregation of Flux Data</span></a> for explanaition.</dd> -<dt>cwc</dt> -<dd>Decides if the total cloud water content will be retrieved (set to <code class="docutils literal notranslate"><span class="pre">1</span></code>) in addition. This is the sum of cloud liquid and cloud ice water content.</dd> -<dt>addpar</dt> -<dd>With this parameter an additional list of 2-dimensional, non-flux parameters can be retrieved. Use format <code class="docutils literal notranslate"><span class="pre">param1/param2/.../paramx</span></code> to list the parameters. Please be consistent in using either the parameter IDs or the short names.</dd> -<dt>doubleelda</dt> -<dd>Use this to double the ensemble member number by adding further disturbance to each member.</dd> -<dt>debug</dt> -<dd>If set to <code class="docutils literal notranslate"><span class="pre">1</span></code> all temporary files were kept at the end. Otherwise everything except the final output files will be deleted.</dd> -<dt>request</dt> -<dd>This produces an extra <em>csv</em> file <code class="docutils literal notranslate"><span class="pre">mars_requests.csv</span></code> where the content of each mars request of the job is stored. Useful for debugging and documentation.</dd> -<dt>mailfail</dt> -<dd>At default the mail is send to the mail connected with the user account. Add additional email addresses if you want. But as soon as you enter a new mail, the default will be overwritten. If you would like to keep the mail from your user account, please add <code class="docutils literal notranslate"><span class="pre">${USER}</span></code> to the list ( comma seperated ) or mail addresses.</dd> +<dl class="simple"> +<dt>rrint</dt><dd><p>Decides if the precipitation flux data uses the old (<code class="docutils literal notranslate"><span class="pre">0</span></code>) or new (<code class="docutils literal notranslate"><span class="pre">1</span></code>) disaggregation scheme. See <a class="reference internal" href="Documentation/disagg.html"><span class="doc">Disaggregation of Flux Data</span></a> for explanaition.</p> +</dd> +<dt>cwc</dt><dd><p>Decides if the total cloud water content will be retrieved (set to <code class="docutils literal notranslate"><span class="pre">1</span></code>) in addition. This is the sum of cloud liquid and cloud ice water content.</p> +</dd> +<dt>addpar</dt><dd><p>With this parameter an additional list of 2-dimensional, non-flux parameters can be retrieved. Use format <code class="docutils literal notranslate"><span class="pre">param1/param2/.../paramx</span></code> to list the parameters. Please be consistent in using either the parameter IDs or the short names.</p> +</dd> +<dt>doubleelda</dt><dd><p>Use this to double the ensemble member number by adding further disturbance to each member.</p> +</dd> +<dt>debug</dt><dd><p>If set to <code class="docutils literal notranslate"><span class="pre">1</span></code> all temporary files were kept at the end. Otherwise everything except the final output files will be deleted.</p> +</dd> +<dt>request</dt><dd><p>This produces an extra <em>csv</em> file <code class="docutils literal notranslate"><span class="pre">mars_requests.csv</span></code> where the content of each mars request of the job is stored. Useful for debugging and documentation.</p> +</dd> +<dt>mailfail</dt><dd><p>At default the mail is send to the mail connected with the user account. Add additional email addresses if you want. But as soon as you enter a new mail, the default will be overwritten. If you would like to keep the mail from your user account, please add <code class="docutils literal notranslate"><span class="pre">${USER}</span></code> to the list ( comma seperated ) or mail addresses.</p> +</dd> </dl> </div> <div class="section" id="hints-for-definition-of-some-parameter-combinations"> <h3>Hints for definition of some parameter combinations<a class="headerlink" href="#hints-for-definition-of-some-parameter-combinations" title="Permalink to this headline">¶</a></h3> -<dl class="docutils"> -<dt>Field types and times</dt> -<dd><p class="first">This combination is very important. It defines the temporal resolution and which field type is extracted per time step. +<dl> +<dt>Field types and times</dt><dd><p>This combination is very important. It defines the temporal resolution and which field type is extracted per time step. The time declaration for analysis (AN) fields uses the times of the specific analysis and (forecast time) steps have to be <code class="docutils literal notranslate"><span class="pre">0</span></code>. The forecast field types (e.g. FC, CF, CV, PF) need to declare a combination of (forescast start) times and the (forecast) steps. Both of them together defines the actual time step. It is important to know the forecast starting times for the dataset to be retrieved, since they are different. In general it is enough to give information for the exact time steps, but it is also possible to have more time step combinations of <code class="docutils literal notranslate"><span class="pre">TYPE</span></code>, <code class="docutils literal notranslate"><span class="pre">TIME</span></code> and <code class="docutils literal notranslate"><span class="pre">STEP</span></code> because the temporal (hourly) resolution with the <code class="docutils literal notranslate"><span class="pre">DTIME</span></code> parameter will select the correct combinations.</p> -<div class="literal-block-wrapper last docutils container" id="id6"> -<div class="code-block-caption"><span class="caption-text">Example of a setting for the field types and temporal resolution.</span><a class="headerlink" href="#id6" title="Permalink to this code">¶</a></div> +<div class="literal-block-wrapper docutils container" id="id5"> +<div class="code-block-caption"><span class="caption-text">Example of a setting for the field types and temporal resolution.</span><a class="headerlink" href="#id5" title="Permalink to this code">¶</a></div> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span> DTIME <span class="m">3</span> TYPE AN FC FC FC AN FC FC FC TIME <span class="m">00</span> <span class="m">00</span> <span class="m">00</span> <span class="m">00</span> <span class="m">12</span> <span class="m">12</span> <span class="m">12</span> <span class="m">12</span> @@ -568,10 +548,9 @@ The time declaration for analysis (AN) fields uses the times of the specific ana </div> </div> </dd> -<dt>Vertical velocity</dt> -<dd><p class="first">The vertical velocity for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> is not directly available from MARS. Therefore it has to be calculated. There are a couple of different options. The following parameters are responsible for the selection. See <a class="reference internal" href="Documentation/vertco.html"><span class="doc">Vertical Coordinate</span></a> for a detailed explanation. The <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code>, <code class="docutils literal notranslate"><span class="pre">OMEGA</span></code> and <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> versions are only recommended for debugging and testing reasons. Usually it is a decision between <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> and <code class="docutils literal notranslate"><span class="pre">ETA</span></code>, where for <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> spectral fields of the horizontal wind fields and the divergence are to be retrieved and used with the continuity equation to calculate the vertical velocity. For <code class="docutils literal notranslate"><span class="pre">ETA</span></code> the latitude/longitude fields of horizontal wind fields and eta-coordinate are to be retrieved. It is recommended to use <code class="docutils literal notranslate"><span class="pre">ETA</span></code> where possible due to a reduced computation time.</p> -<div class="literal-block-wrapper last docutils container" id="id7"> -<div class="code-block-caption"><span class="caption-text">Example setting for the vertical coordinate retrieval.</span><a class="headerlink" href="#id7" title="Permalink to this code">¶</a></div> +<dt>Vertical velocity</dt><dd><p>The vertical velocity for <code class="docutils literal notranslate"><span class="pre">FLEXPART</span></code> is not directly available from MARS. Therefore it has to be calculated. There are a couple of different options. The following parameters are responsible for the selection. See <a class="reference internal" href="Documentation/vertco.html"><span class="doc">Vertical Coordinate</span></a> for a detailed explanation. The <code class="docutils literal notranslate"><span class="pre">ETADIFF</span></code>, <code class="docutils literal notranslate"><span class="pre">OMEGA</span></code> and <code class="docutils literal notranslate"><span class="pre">OMEGADIFF</span></code> versions are only recommended for debugging and testing reasons. Usually it is a decision between <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> and <code class="docutils literal notranslate"><span class="pre">ETA</span></code>, where for <code class="docutils literal notranslate"><span class="pre">GAUSS</span></code> spectral fields of the horizontal wind fields and the divergence are to be retrieved and used with the continuity equation to calculate the vertical velocity. For <code class="docutils literal notranslate"><span class="pre">ETA</span></code> the latitude/longitude fields of horizontal wind fields and eta-coordinate are to be retrieved. It is recommended to use <code class="docutils literal notranslate"><span class="pre">ETA</span></code> where possible due to a reduced computation time.</p> +<div class="literal-block-wrapper docutils container" id="id6"> +<div class="code-block-caption"><span class="caption-text">Example setting for the vertical coordinate retrieval.</span><a class="headerlink" href="#id6" title="Permalink to this code">¶</a></div> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>GAUSS <span class="m">0</span> ETA <span class="m">1</span> ETADIFF <span class="m">0</span> @@ -582,12 +561,11 @@ OMEGADIFF <span class="m">0</span> </div> </div> </dd> -<dt>Grid resolution and domain</dt> -<dd><p class="first">The grid and domain selection depends on each other. The grid can be defined in the format of normal degrees (e.g. <code class="docutils literal notranslate"><span class="pre">1.</span></code>) or as in older versions by 1/1000. degrees (e.g. <code class="docutils literal notranslate"><span class="pre">1000</span></code> for <code class="docutils literal notranslate"><span class="pre">1°</span></code>). +<dt>Grid resolution and domain</dt><dd><p>The grid and domain selection depends on each other. The grid can be defined in the format of normal degrees (e.g. <code class="docutils literal notranslate"><span class="pre">1.</span></code>) or as in older versions by 1/1000. degrees (e.g. <code class="docutils literal notranslate"><span class="pre">1000</span></code> for <code class="docutils literal notranslate"><span class="pre">1°</span></code>). After selecting the grid, the domain has to be defined in a way that the length of the domain in longitude or latitude direction must be an exact multiple of the grid. The horizontal resolution for spectral fields will be set by the parameter <code class="docutils literal notranslate"><span class="pre">RESOL</span></code>. For information about how to select an appropriate value you can read the explanation of the MARS keyword <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Post-processing+keywords#Post-processingkeywords-resol">here</a> and in <a class="reference external" href="https://confluence.ecmwf.int/display/UDOC/Retrieve#Retrieve-Truncationbeforeinterpolation">this table</a>.</p> -<div class="literal-block-wrapper last docutils container" id="id8"> -<div class="code-block-caption"><span class="caption-text">Example setting for a northern hemisphere domain with a grid of <code class="docutils literal notranslate"><span class="pre">0.25°</span></code>.</span><a class="headerlink" href="#id8" title="Permalink to this code">¶</a></div> +<div class="literal-block-wrapper docutils container" id="id7"> +<div class="code-block-caption"><span class="caption-text">Example setting for a northern hemisphere domain with a grid of <code class="docutils literal notranslate"><span class="pre">0.25°</span></code>.</span><a class="headerlink" href="#id7" title="Permalink to this code">¶</a></div> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>GRID <span class="m">0</span>.25 RESOL <span class="m">799</span> SMOOTH <span class="m">0</span> @@ -599,10 +577,9 @@ RIGHT <span class="m">180</span>. </div> </div> </dd> -<dt>Flux data</dt> -<dd><p class="first">The flux fields are accumulated forecast fields all the time. Since some re-analysis dataset nowadays have complete set of analysis fields in their temporal resolution it was important to define a new parameter set to define the flux fields since the information could not be taken from <code class="docutils literal notranslate"><span class="pre">TYPE</span></code>, <code class="docutils literal notranslate"><span class="pre">TIME</span></code> and <code class="docutils literal notranslate"><span class="pre">STEP</span></code> any longer. Select a forecast field type <code class="docutils literal notranslate"><span class="pre">ACCTYPE</span></code>, the forecast starting time <code class="docutils literal notranslate"><span class="pre">ACCTIME</span></code> and the maximum forecast step <code class="docutils literal notranslate"><span class="pre">ACCMAXSTEP</span></code>. The <code class="docutils literal notranslate"><span class="pre">DTIME</span></code> parameter defines the temporal resolution for the whole period.</p> -<div class="literal-block-wrapper last docutils container" id="id9"> -<div class="code-block-caption"><span class="caption-text">Example setting for the definition of flux fields.</span><a class="headerlink" href="#id9" title="Permalink to this code">¶</a></div> +<dt>Flux data</dt><dd><p>The flux fields are accumulated forecast fields all the time. Since some re-analysis dataset nowadays have complete set of analysis fields in their temporal resolution it was important to define a new parameter set to define the flux fields since the information could not be taken from <code class="docutils literal notranslate"><span class="pre">TYPE</span></code>, <code class="docutils literal notranslate"><span class="pre">TIME</span></code> and <code class="docutils literal notranslate"><span class="pre">STEP</span></code> any longer. Select a forecast field type <code class="docutils literal notranslate"><span class="pre">ACCTYPE</span></code>, the forecast starting time <code class="docutils literal notranslate"><span class="pre">ACCTIME</span></code> and the maximum forecast step <code class="docutils literal notranslate"><span class="pre">ACCMAXSTEP</span></code>. The <code class="docutils literal notranslate"><span class="pre">DTIME</span></code> parameter defines the temporal resolution for the whole period.</p> +<div class="literal-block-wrapper docutils container" id="id8"> +<div class="code-block-caption"><span class="caption-text">Example setting for the definition of flux fields.</span><a class="headerlink" href="#id8" title="Permalink to this code">¶</a></div> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span> DTIME <span class="m">3</span> ACCTYPE FC ACCTIME <span class="m">00</span>/12 @@ -638,7 +615,7 @@ RIGHT <span class="m">180</span>. <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/search.html b/Documentation/html/search.html index d831fe99233904bade7a2aa97c8be56a95025740..5e757f0354cadae1b43c0f0e45e63514400b3420 100644 --- a/Documentation/html/search.html +++ b/Documentation/html/search.html @@ -21,12 +21,12 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> - <script type="text/javascript" src="_static/searchtools.js"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/searchtools.js"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -184,7 +184,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/searchindex.js b/Documentation/html/searchindex.js index 38fe168d6bb8d333fef8bef601b082b2f0a3b6dc..11d8196c28a6c508a23d3c563851de7b4f2e0d0d 100644 --- a/Documentation/html/searchindex.js +++ b/Documentation/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["Developers/gen_docu","Documentation/Api/api_fortran","Documentation/Api/api_python","Documentation/Input/changes","Documentation/Input/compilejob","Documentation/Input/control","Documentation/Input/control_params","Documentation/Input/ecmwf_env","Documentation/Input/examples","Documentation/Input/fortran_makefile","Documentation/Input/jobscript","Documentation/Input/run","Documentation/Input/setup","Documentation/Input/templates","Documentation/Overview/app_modes","Documentation/Overview/prog_flow","Documentation/api","Documentation/disagg","Documentation/input","Documentation/output","Documentation/overview","Documentation/vertco","Ecmwf/access","Ecmwf/ec-links","Ecmwf/hintsecmwf","Ecmwf/msdata","Ecmwf/pubdata","Evaluation/metrics","Evaluation/staticcode","Evaluation/testcases","Installation/gateway","Installation/local","Installation/remote","Support/faq","Support/known_bugs_issues","authors","changelog","dev_guide","documentation","ecmwf_data","evaluation","index","installation","quick_start","support","todo"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:55},filenames:["Developers/gen_docu.rst","Documentation/Api/api_fortran.rst","Documentation/Api/api_python.rst","Documentation/Input/changes.rst","Documentation/Input/compilejob.rst","Documentation/Input/control.rst","Documentation/Input/control_params.rst","Documentation/Input/ecmwf_env.rst","Documentation/Input/examples.rst","Documentation/Input/fortran_makefile.rst","Documentation/Input/jobscript.rst","Documentation/Input/run.rst","Documentation/Input/setup.rst","Documentation/Input/templates.rst","Documentation/Overview/app_modes.rst","Documentation/Overview/prog_flow.rst","Documentation/api.rst","Documentation/disagg.rst","Documentation/input.rst","Documentation/output.rst","Documentation/overview.rst","Documentation/vertco.rst","Ecmwf/access.rst","Ecmwf/ec-links.rst","Ecmwf/hintsecmwf.rst","Ecmwf/msdata.rst","Ecmwf/pubdata.rst","Evaluation/metrics.rst","Evaluation/staticcode.rst","Evaluation/testcases.rst","Installation/gateway.rst","Installation/local.rst","Installation/remote.rst","Support/faq.rst","Support/known_bugs_issues.rst","authors.rst","changelog.rst","dev_guide.rst","documentation.rst","ecmwf_data.rst","evaluation.rst","index.rst","installation.rst","quick_start.rst","support.rst","todo.rst"],objects:{"":{ControlFile:[2,0,0,"-"],EcFlexpart:[2,0,0,"-"],GribUtil:[2,0,0,"-"],MarsRetrieval:[2,0,0,"-"],UioFiles:[2,0,0,"-"],checks:[2,0,0,"-"],disaggregation:[2,0,0,"-"],get_mars_data:[2,0,0,"-"],install:[2,0,0,"-"],prepare_flexpart:[2,0,0,"-"],submit:[2,0,0,"-"],tools:[2,0,0,"-"]},"ControlFile.ControlFile":{"public":[2,2,1,""],accmaxstep:[2,2,1,""],acctime:[2,2,1,""],acctype:[2,2,1,""],accuracy:[2,2,1,""],addpar:[2,2,1,""],area:[2,2,1,""],assign_args_to_control:[2,3,1,""],assign_envs_to_control:[2,3,1,""],basetime:[2,2,1,""],cds_api:[2,2,1,""],check_conditions:[2,3,1,""],controlfile:[2,2,1,""],cwc:[2,2,1,""],dataset:[2,2,1,""],date_chunk:[2,2,1,""],debug:[2,2,1,""],destination:[2,2,1,""],doubleelda:[2,2,1,""],dpdeta:[2,2,1,""],dtime:[2,2,1,""],ec_api:[2,2,1,""],ecfsdir:[2,2,1,""],ecgid:[2,2,1,""],ecstorage:[2,2,1,""],ectrans:[2,2,1,""],ecuid:[2,2,1,""],end_date:[2,2,1,""],eta:[2,2,1,""],etadiff:[2,2,1,""],etapar:[2,2,1,""],exedir:[2,2,1,""],expver:[2,2,1,""],flexextractdir:[2,2,1,""],format:[2,2,1,""],gateway:[2,2,1,""],gauss:[2,2,1,""],gaussian:[2,2,1,""],grid:[2,2,1,""],inputdir:[2,2,1,""],install_target:[2,2,1,""],installdir:[2,2,1,""],left:[2,2,1,""],level:[2,2,1,""],levelist:[2,2,1,""],logicals:[2,2,1,""],lower:[2,2,1,""],mailfail:[2,2,1,""],mailops:[2,2,1,""],makefile:[2,2,1,""],marsclass:[2,2,1,""],maxstep:[2,2,1,""],number:[2,2,1,""],omega:[2,2,1,""],omegadiff:[2,2,1,""],oper:[2,2,1,""],outputdir:[2,2,1,""],prefix:[2,2,1,""],purefc:[2,2,1,""],request:[2,2,1,""],resol:[2,2,1,""],right:[2,2,1,""],rrint:[2,2,1,""],smooth:[2,2,1,""],start_date:[2,2,1,""],step:[2,2,1,""],stream:[2,2,1,""],time:[2,2,1,""],to_list:[2,3,1,""],type:[2,2,1,""],upper:[2,2,1,""],wrf:[2,2,1,""]},"EcFlexpart.EcFlexpart":{"public":[2,2,1,""],accmaxstep:[2,2,1,""],acctime:[2,2,1,""],acctype:[2,2,1,""],accuracy:[2,2,1,""],addpar:[2,2,1,""],area:[2,2,1,""],basetime:[2,2,1,""],calc_extra_elda:[2,3,1,""],create:[2,3,1,""],dataset:[2,2,1,""],dates:[2,2,1,""],deacc_fluxes:[2,3,1,""],dtime:[2,2,1,""],expver:[2,2,1,""],gaussian:[2,2,1,""],glevelist:[2,2,1,""],grid:[2,2,1,""],inputdir:[2,2,1,""],level:[2,2,1,""],levelist:[2,2,1,""],marsclass:[2,2,1,""],mreq_count:[2,2,1,""],number:[2,2,1,""],outputfilelist:[2,2,1,""],params:[2,2,1,""],process_output:[2,3,1,""],purefc:[2,2,1,""],resol:[2,2,1,""],retrieve:[2,3,1,""],server:[2,2,1,""],stream:[2,2,1,""],types:[2,2,1,""],write_namelist:[2,3,1,""]},"GribUtil.GribUtil":{copy_dummy_msg:[2,3,1,""],get_keys:[2,3,1,""],index:[2,3,1,""],set_keys:[2,3,1,""]},"MarsRetrieval.MarsRetrieval":{"public":[2,2,1,""],accuracy:[2,2,1,""],area:[2,2,1,""],data_retrieve:[2,3,1,""],dataset:[2,2,1,""],date:[2,2,1,""],display_info:[2,3,1,""],expver:[2,2,1,""],gaussian:[2,2,1,""],grid:[2,2,1,""],levelist:[2,2,1,""],levtype:[2,2,1,""],marsclass:[2,2,1,""],number:[2,2,1,""],param:[2,2,1,""],print_infodata_csv:[2,3,1,""],repres:[2,2,1,""],resol:[2,2,1,""],server:[2,2,1,""],step:[2,2,1,""],stream:[2,2,1,""],target:[2,2,1,""],time:[2,2,1,""],type:[2,2,1,""]},"UioFiles.UioFiles":{delete_files:[2,3,1,""],files:[2,2,1,""],path:[2,2,1,""],pattern:[2,2,1,""]},ControlFile:{ControlFile:[2,1,1,""]},EcFlexpart:{EcFlexpart:[2,1,1,""]},GribUtil:{GribUtil:[2,1,1,""]},MarsRetrieval:{MarsRetrieval:[2,1,1,""]},UioFiles:{UioFiles:[2,1,1,""]},checks:{check_accmaxstep:[2,4,1,""],check_acctime:[2,4,1,""],check_acctype:[2,4,1,""],check_addpar:[2,4,1,""],check_area:[2,4,1,""],check_basetime:[2,4,1,""],check_dates:[2,4,1,""],check_grid:[2,4,1,""],check_job_chunk:[2,4,1,""],check_len_type_time_step:[2,4,1,""],check_levels:[2,4,1,""],check_logicals_type:[2,4,1,""],check_mail:[2,4,1,""],check_maxstep:[2,4,1,""],check_number:[2,4,1,""],check_pathes:[2,4,1,""],check_ppid:[2,4,1,""],check_public:[2,4,1,""],check_purefc:[2,4,1,""],check_queue:[2,4,1,""],check_request:[2,4,1,""],check_step:[2,4,1,""],check_time:[2,4,1,""],check_type:[2,4,1,""]},disaggregation:{IA3:[2,4,1,""],dapoly:[2,4,1,""],darain:[2,4,1,""]},get_mars_data:{check_dates_for_nonflux_fc_times:[2,4,1,""],do_retrievement:[2,4,1,""],get_mars_data:[2,4,1,""],main:[2,4,1,""],mk_dates:[2,4,1,""],mk_server:[2,4,1,""],remove_old:[2,4,1,""],write_reqheader:[2,4,1,""]},install:{check_install_conditions:[2,4,1,""],del_convert_build:[2,4,1,""],get_install_cmdline_args:[2,4,1,""],install_local:[2,4,1,""],install_via_gateway:[2,4,1,""],main:[2,4,1,""],mk_compilejob:[2,4,1,""],mk_convert_build:[2,4,1,""],mk_env_vars:[2,4,1,""],mk_job_template:[2,4,1,""],mk_tarball:[2,4,1,""],un_tarball:[2,4,1,""]},prepare_flexpart:{main:[2,4,1,""],prepare_flexpart:[2,4,1,""]},submit:{main:[2,4,1,""],mk_jobscript:[2,4,1,""],submit:[2,4,1,""]},tools:{clean_up:[2,4,1,""],execute_subprocess:[2,4,1,""],generate_retrieval_period_boundary:[2,4,1,""],get_cmdline_args:[2,4,1,""],get_dimensions:[2,4,1,""],get_informations:[2,4,1,""],get_list_as_string:[2,4,1,""],init128:[2,4,1,""],make_dir:[2,4,1,""],my_error:[2,4,1,""],none_or_int:[2,4,1,""],none_or_str:[2,4,1,""],normal_exit:[2,4,1,""],product:[2,4,1,""],put_file_to_ecserver:[2,4,1,""],read_ecenv:[2,4,1,""],send_mail:[2,4,1,""],setup_controldata:[2,4,1,""],silent_remove:[2,4,1,""],submit_job_to_ecserver:[2,4,1,""],to_param_id:[2,4,1,""],to_param_id_with_tablenumber:[2,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"00h":[6,11],"10u":19,"10v":19,"12h":[6,11],"180w":6,"18utc":2,"1hourli":[8,43],"1st":43,"20c":[5,6,19,21,22,23,36,42,43],"20gb":43,"24h":[2,6],"25th":43,"31st":43,"32000mb":[10,13],"3200mb":[4,13],"36hour":[8,43],"3hourli":[8,43],"4th":43,"6th":43,"althanstra\u00df":35,"boolean":2,"break":17,"case":[0,2,4,6,10,13,14,17,19,21,22,31,32,33,42,43],"class":[0,5,6,31],"datens\u00e4tz":[],"default":[2,3,5,6,8,10,11,12,18,19,43],"einf\u00fchrung":[],"export":[4,10,13],"f\u00fcr":13,"final":[0,2,11,15,17,19,21,43],"float":[2,11],"function":[2,17,41,43,45],"import":[2,6,11,30,31,33,39,43],"int":[2,6,30,32,43],"long":43,"m\u00f6glich":[],"new":[2,6,10,11,17,18,41,43,44],"public":[2,5,6,8,10,11,12,14,22,23,24,31,36,39,41],"return":[2,4,10],"short":[2,5,6,17,30,43],"static":[],"switch":[2,4,6,10,13,19],"true":[0,2],"try":[31,42],"while":[22,43],ARE:5,But:43,C3S:23,CDS:[2,22,23,33,36,42],Dps:[2,6],ENS:[23,43],FOR:[11,12],For:[0,2,3,5,6,9,11,12,13,14,18,19,21,22,24,30,32,33,39,42,43],HAS:[11,12,30,31,32,43],Has:[6,11],IDs:[6,15,43],Its:2,NOT:[11,12,31],Not:[],PBS:[4,10,13],THE:[11,12,30,31,32,43],THESE:[11,12,30,31,32,43],The:[0,2,7,13,14,15,17,18,19,20,21,22,30,31,32,39,42,43,44,45],Then:[2,11,14,42],There:[2,18,19,22,39,42,43],These:[2,4,10,13,17,42,43],Use:[0,6,32,43],Used:[2,12],Useful:43,Uses:2,Using:31,WITH:[11,12],With:[6,11,12,43],_acc:19,_config:2,_expand:2,_file:0,_local:44,_orolsm:19,_templat:2,a_0:17,a_1:17,a_2:17,a_3:17,abcd:2,abl:[2,13,17,18,22,30,43],about:[2,5,11,14,19,33,39,42,43],abov:[2,39,43],acc:[],accept:[6,14,21,22,42],access:[2,5,6,12,14,19,23,24,30,31,32,39,41,42,43],accmaxstep:[2,5,6,10,43],accomplish:15,accord:[6,12,43],account:[30,32,39,42,43],acctim:[2,5,6,10,43],acctyp:[2,5,6,10,43],accumlu:2,accumul:[2,6,17,19,43],accur:43,accuraci:[2,5,6,10,19,21],achiev:21,action:[23,31,32],activid:32,actual:[2,6,12,13,18,19,42,43],adapt:[0,2,5,6,9,11,12,13,18,31,32,33,43],add:[2,43],added:[17,19],adding:[2,43],addit:[2,5,11,14,15,17,30,39,43],addition:[2,5,6,14,18,20,30,43,44],addpar:[2,5,6,10,43],address:[2,6,19,30,32,43],adjac:17,adjust:41,admin:[30,31,33],administr:[],adress:12,advanc:[2,43],advis:[],aerosol:35,affect:17,after:[2,5,6,11,12,15,17,18,19,43],afterward:[2,13,17,30,31,32],again:[11,12,43],against:43,aggreg:19,agre:[],agreement:[14,22,41],aim:[],albatross:[],algorithm:[2,17,36],alist:2,all:[2,5,6,8,11,12,13,15,17,19,30,31,32,33,39,42,43,44],allow:[2,6,11,22],alpabet:2,alreadi:[2,11,22,30,31,32,42,43],also:[2,5,6,10,11,12,15,17,18,19,21,22,32,39,42,43],alt:[],altern:42,alwai:[6,11],amount:[2,6,11,17,39],anaconda:[31,42],analys:21,analysi:[2,5,6,11,19,22,39,43],ander:[],ani:[2,3,5,6,11,12,14,17,21,32,33,42,43,44],ann:[2,5,10,11,12,19,31,35,45],annep:[10,12],announc:[43,44],anog__ml:19,anog__sl:19,anoth:[2,6,22,43],ansh__sl:19,anymor:[3,36],anyon:44,anyth:[6,11,12,13],api:[2,6,11,14,22,23,33,36,42,43],app:[30,32],appear:[21,43],append:2,appli:[2,11,17,21,36,42,43],applic:[2,4,6,7,9,10,11,12,13,20,21,42,43,44],approach:17,appropri:[6,43],approri:6,april:43,apt:[30,31],arbitrari:2,archiv:[2,5,11,18,20,22,30,41,42],area:[2,5,6,10,11,12,17,19,31,43],arg:2,argument:[2,11,12,18,22,30,31,32,42,43,44],aris:14,around:[17,20],arrai:2,arrang:2,array_t1:2,array_t2:2,array_t3:2,array_t4:2,articl:[2,6],ascrib:17,ask:[19,32,41,42,44],aspect:42,assign:2,assign_args_to_control:2,assign_envs_to_control:2,assimil:43,associ:[2,12,30],association_nam:30,assum:[21,31],atm:21,atmospher:[17,20,23,41,43],attent:[6,43],attribut:[2,11,12,41],august:43,austria:35,author:[2,5,11,12,32],auto:38,automat:[6,11,14,17,22,43,44],autoprogram:1,avail:[2,3,5,6,11,12,15,17,19,21,22,23,30,31,32,33,39,42,43],averag:17,avoid:[19,21,36,43],awar:43,awk:[4,13],back:[6,11,42],bahaviour:5,ball:[2,4,12,42],base:[2,7,10,11,17,36,39],basetim:[2,5,6,10,11,17,36,43],bash:[11,12],basic:[2,17],batch:[4,10,11,12,13,18,20,30,43],bdynam:31,beaver:[30,31],becaus:[21,43,45],beck:2,becom:[],bee:[],been:[15,30,31,32,42],befor:[0,2,6,10,17,32,39,42,43],begin:[2,13,17],beginn:[18,43],behaviour:18,being:[12,13,19],belong:[42,43],below:[9,17,19,21,31,43],beschreibung:[],besonderheiten:[],best:[6,17,39,43],better:[6,43],between:[2,4,6,7,10,17,19,21,30,43],bicub:17,big:[30,31,32],bilinear:17,bin:[4,10,11,12,13],bionic:[30,31],bit:[2,6],blank:2,block:[19,43],blockdiag:0,blockdiag_fontpath:0,blockdiagram:11,blog:33,blue:[12,17],bone:[],border:17,both:[2,21,31,39,43],boundari:[2,11,17],box:[2,11,12,41],bracket:43,branch:42,broader:39,bstatic:31,bug:41,build:[2,23],built:32,bunch:2,buster:[30,31],button:42,bypass:22,calc_extra_elda:2,calcul:[2,5,6,15,17,19,20,43],calibr:[6,43],call:[2,4,10,11,12,13,15,18,19,30,31,42,43],can:[2,3,5,6,9,11,12,13,14,15,18,19,20,21,22,30,31,32,39,41,42,43,44,45],cancel:22,cannot:[21,43],care:[6,11],carefulli:39,carri:[2,6,17],cat:[10,13],catalogu:[6,43],catego:43,categor:[],categoris:[],caus:[],caution:43,cautiou:43,cautious:43,caveat:43,cca:[2,4,9,10,11,12,13,14,32,43],ccb:[4,9,10,11,13,32],cdot:17,cds_api:[2,10],cdsapi:31,cdsapirc:31,ce00010800:19,ce00090800:[],ce00090803:[],ce00090806:[],ce00090809:[],ce00090812:[],ce00090815:[],ce00090818:[],ce00090821:[],ce000908:43,cell:17,centr:[19,20,39,41],central:[2,17],cera20c:[6,31],cera:[5,6,19,21,22,23,36,41,42],cera_exampl:43,cera_testgrid_local_cd:19,cerapubl:43,certain:42,certif:30,chang:[5,6,11,12,13,15,17,18,19,23,32,39,41,42,43],changelog:41,charact:2,character:2,characteris:2,check:[4,6,10,11,12,15,18,30,31,33,42,43,45],check_accmaxstep:2,check_acctim:2,check_acctyp:2,check_addpar:2,check_area:2,check_basetim:2,check_condit:2,check_dat:2,check_dates_for_nonflux_fc_tim:2,check_grid:2,check_install_condit:2,check_job_chunk:2,check_len_type_time_step:2,check_level:2,check_logicals_typ:2,check_mail:2,check_maxstep:2,check_numb:2,check_path:2,check_ppid:2,check_publ:2,check_purefc:2,check_queu:2,check_request:2,check_step:2,check_tim:2,check_typ:2,checkerboard:17,chernobyl:[],choic:[21,31,43],choos:21,chosen:[2,21],chunk:[2,11],circl:17,ciwc:[],classif:[2,6],clean:2,clean_up:2,clear:43,click:[24,42],client:[2,31],climat:[22,23,42],clist:2,clone:42,cloud:[2,6,19,43],clwc:[],cmd_list:2,coars:[],coarser:[3,6],code:[0,2,6,13,31,32,36,41,42],coincid:[],collect:[2,39,41,43,44],collis:19,colour:17,column:2,combin:[2,11,41],come:31,comma:[2,6,43],command:[2,4,5,10,11,12,15,18,22,30,31,32,42,43],commandlin:[2,11,12,30,31,32,43,44],comment:[3,5,13],common:[2,11,12,41,43],commonli:2,commun:[15,17,39,42,43,44],compar:17,compat:[3,6,18,21],compil:[2,9,12,13,18,30,31,32,33,42],compilejob:[18,43],complet:[2,14,17,23,31,36,43,45],complex:39,compon:[0,2,17,19,42],composit:[5,19,43],comprehens:5,comput:[13,17,21,22,23,30,42,43],computation:[],concaten:2,concatenate_sign:2,concern:2,conda:31,condit:[2,6,11,17],conduct:12,configur:[2,12,42],confluenc:2,confus:39,congratul:42,connect:[2,22,43],connectd:[30,32],conrtol:43,conserv:[2,6,17],consid:[],consider:17,consist:[2,3,11,17,18,19,20,21,39,43],consol:[30,31],constel:8,constitut:11,construct:[0,27,28,37,38,40],consult:[],consum:31,contact:23,contain:[0,2,5,7,11,13,17,19,21,33,42,43,44],content:[2,6,13,23,30,32,41,43],context:2,continu:[2,6,17,43],control:[2,10,11,12,13,15,19,21,22,38,39,41,42,44,45],control_:[5,43],control_cera:[8,10,43],control_cont:13,control_ea5:[8,11,12,30,31,32,43],control_ei:[8,43],control_od:[8,43],control_param:[],controlfil:[10,11,12,13,30,31,32,43],controlparamet:5,convect:[2,11,17,19],conveni:43,convent:[2,5],convers:[2,20],convert2:[2,4,12,13,18,21,30,31,32,36,42,43],convert:[2,15,17,31,38,42,43],convert_pr:42,coordin:[5,19,38,39,43],copernicu:42,copi:[2,11,12,41,43],copy_dummy_msg:2,copyright:[2,11,12],corner:6,correct:[2,6,43],correctli:[2,6],correspon:18,correspond:[2,6,11,13,19,43],cost:21,could:[17,43],count:[6,11],counter:2,coupl:[2,8,9,12,13,43],coverag:[],covert2:15,crai:[4,9,10,13,32],creat:[0,2,4,6,7,10,11,12,13,15,18,20,21,30,32,43,44],creation:[],creativ:[2,11,12,41],creativecommon:[2,11,12,41],credenti:[12,13,15,18,31,42,43,44],cross:6,crunchi:[],csv:[2,6,15,19,43],cubic:2,current:[0,2,6,9,12,14,21,31,42,43],curv:[],cvh:19,cvl:19,cwc:[2,5,6,10,43],cycl:43,cyclic:[6,21],d64:[30,32],daher:[],dai:[2,6,11,17,19,23,30,31,43],daili:[6,43],damp:17,dapoli:2,darain:2,dark:17,dat:11,data:[2,5,8,11,12,15,20,21,22,23,31,36,38,41,42,45],data_retriev:2,databas:23,dataset:[2,5,6,10,11,14,17,18,19,21,22,23,31,39,41],datatyp:[11,19],date:[2,5,6,11,12,17,19,31,43],date_chunk:[2,5,6,10,11,43],date_time_steprang:19,datechunk:2,datelin:6,datetim:2,day1:[],day2:[],deacc:[],deacc_flux:2,deaccumul:[2,43],debian:[30,31],debug:[2,5,6,10,11,19,21,36,43],decid:[2,5,18,42,43],decis:[2,43],declar:43,declin:22,decompos:2,defin:[2,5,6,10,11,12,19,21,24,39,42,43],definit:[2,5,18,41],degre:[6,21,43],degress:3,dejavu:0,dejavuserif:0,del_convert_build:2,delai:44,delet:[2,6,19,32,43],delete_fil:2,delta:17,delta_t:2,demand:[17,21,31,43],demonstr:19,denot:[2,17],depart:35,depend:[2,6,11,12,13,14,15,17,19,20,21,41,43],deposit:17,deprec:2,depthbelowlandlay:19,der:[],deriv:[2,30,31],desc:[],describ:[12,14,18,19,20,22,32,42,43],describt:[],descript:[2,5,6,8,11,12,13,18,19,21,39,42,43,44,45],descrption:[],design:43,desir:[2,6,17,21],destin:[2,5,6,7,10,12,13,15,30,31,32,43],destination_nam:[7,13],deta:21,detail:[2,5,15,19,20,21,42,43],detect:[6,44],determin:[2,11,12,17],dev:[17,31,42],develop:[0,2,6,17,41,44],diagnost:[2,6],diagram:[0,12,15],diagramm:[],diamond:17,dict:2,dictionari:2,differ:[2,6,8,14,21,22,39,43],differenti:[4,10,43],difficulti:15,digest:[],digit:19,dimens:[2,17],dimension:[2,17,43],direct:[2,13,14,21,22,43],directli:[2,4,10,11,12,13,14,22,42,43],directoi:42,directori:[0,2,4,5,6,7,8,9,10,11,12,13,14,18,31,32,36,42,43],dirsfirst:[],dis:19,disabl:[6,21],disaggegr:2,disaggreg:[5,6,15,36,38,43],discard:6,discret:[17,19],discretis:[],discuss:[22,43],disk:31,dispers:[2,6,17],displai:[2,6,32],display_info:2,disregard:2,distinct:2,distinguish:[6,11],distribut:[30,31,41,42,43],disturb:43,diverg:[19,43],divers:[2,36],divid:[2,11,17,22],do_retriev:2,document:[5,8,11,19,21,23,30,32,36,43],doe:[2,11,12,14,33,43],doesn:[6,11,12],doi:[6,17],doing:2,doku:[],domain:[5,43],don:[31,33,42],done:[2,4,6,10,11,12,13,14,15,17,20,22,31,42,43],dot:0,doubl:[2,4,6,8,10,11,13,43],doubleelda:[2,5,6,10,43],down:[17,42],download:[23,32,36,41],download_cdsapi:31,download_cera20c_ecmwfapi:31,download_era5_cdsapi:31,download_erainterim_ecmwfapi:31,downward:[3,6,18],dpdeta:[2,5,6,10,43],dpkg:[31,42],drive:[2,19,20,43],dry:17,dtime:[2,3,5,6,10,43],due:[6,11,12,17,43],durat:43,dure:[2,4,9,12,13,15,18,31,42],each:[2,5,6,10,11,13,14,17,19,39,42,43],earlier:[],easi:[17,18,20,43],easier:[18,22,43],easiest:[30,31],easili:[2,11],east:[2,11],eastern:2,eastward:[17,19],ec_api:[2,10],ec_memory_per_task:[4,10,13],ec_threads_per_task:[4,10,13],ecac:32,ecaccess:[2,4,10,12,13,14,15,22,23,30,32,43],ecaccess_do_not_remov:[4,10,13,43],ecc:2,eccod:[4,10,12,13,23,30,31,32,33,36],eccodes_include_dir:[9,31],eccodes_lib:[9,31],ecd:2,ecf:[2,6,32],ecfsdir:[2,5,6,10],ecg:[4,10,13],ecgat:[2,4,6,9,10,11,12,13,14,21,30,32,43],ecgb11:[32,43],ecgb:[4,10,13],ecgid:[2,5,6,7,10,12,13,30,31,32,43],echo:[4,12,13],echom:32,ecmf:19,ecmwf:[2,4,5,6,9,10,11,12,13,14,15,17,18,19,20,21,22,23,30,32,33,36,41,43],ecmwf_env:[2,11,12,18,43],ecmwf_grib1_table_128:[],ecmwfapi:[31,33],ecmwfapirc:31,ecmwfdata7:[],ecmwfdata:[],ecmwfdataserv:[2,31],ecmwfservic:[2,31],ecnam:12,econdemand:[2,5,6,10],ecscratch:32,ecstorag:[2,5,6,10],ectmp:[2,5,6,10],ectran:[2,5,6,10,15,30,32,43],ecuid:[2,5,6,7,10,12,13,30,31,32,43],ecwmf:42,edg:12,edit:[19,31],editor:[31,32],edu:[],effect:[13,21,43],effici:[13,17,19,43],egat:12,ei15080900:[],ei15080903:[],ei15080906:[],ei15080909:[],ei15080912:[],ei15080915:[],ei15080918:[],ei15080921:[],ei_exampl:[],einweisung:[],einzelnen:[],either:[2,6,11,14,15,43],elda:[2,6,8,36,43],element:[2,3],els:[4,10,12,13],email:[2,4,6,10,13,30,32,43,44],emo:[4,10,13],emoslib:[21,23,31,32,33],empti:[2,11,12],enabl:[22,30,43],encount:42,end:[2,4,6,10,11,13,17,19,43],end_dat:[2,5,6,10,11,17,43],end_period:2,enda:[10,19,31,43],endian:[30,31,32],endif:17,endo:6,enfo:[6,8,36,43],enough:[6,39,43],ens:[8,43],ensembl:[2,6,23,36,43],ensemble_memb:19,ensur:21,enter:[30,43],entri:[2,11,45],env:[2,4,13],environ:[2,4,6,10,11,12,13,14,20,33,41,42,43,44],environment:[2,35,43],enyymmddhh:[],eof:[10,13],equal:[2,6,11,21,43],equat:[2,6,17,43],equidistantli:17,equival:[30,31],era5:[2,5,6,21,22,23,31,42,43],era:[5,6,11,19,21,22,23,36,41,42],error:[2,4,10,12,13,21,30,31,43],error_msg:2,esac:[4,10,13],escap:13,especi:[21,39,42,43],establish:[14,30],eta:[2,5,6,8,10,19,21,38,43],etadiff:[2,5,6,10,21,43],etadot:[2,6,19,43],etadothigh2:[],etapar:[2,5,6,10],etayymmddhh:[6,21],etc:[31,44],europ:43,european:[20,39,41],evalu:41,even:[17,21,31,32,43],event:17,eventu:[11,15],everi:[22,30,43],everyon:6,everyth:[0,2,14,31,43],ewss:[17,19],exact:[2,17,43],exactli:[],exampl:[2,3,6,7,11,17,18,19,22,23,30,31,39,42,43],example_usernam:30,exce:43,exceed:43,excelt:0,except:[2,6,21,31,43],execut:[2,9,10,12,13,14,15,18,19,32,42],execute_subprocess:2,exedir:2,exist:[2,6,11,43],exit:[2,11,12],expect:[2,43],expens:[6,21],experi:[6,43,44],experienc:43,experiment:[],explain:[43,45],explan:43,explanait:43,explic:20,explicit:[22,42],explicitli:[6,20,22,43],express:2,expver:[2,5,6,10,19,31],extend:43,extens:[0,2,6,17],extra:[2,5,6,14,19,36,42,43],extract:[2,5,6,19,21,22,31,43,45],f90:[30,31,32,36],f_i:17,facil:[22,30],factor:[],fail:[2,4,6,10,13,43],failur:43,fals:2,familiar:43,faq:41,far:6,fast:20,faster:[18,22,44],fcgg__sl:[],fcog__ml:[],fcog__sl:[],fcog_acc_sl:19,fconvert:[30,31,32],fcrai:[30,31,32],fcsh__ml:[],fcsh__sl:[],fdefault:[30,31,32],feasibl:21,featur:[2,6,20,41,44],februari:5,fedir:2,feel:42,felder:[],fell:[],few:[6,30,32,43],fewer:43,ffix:[30,31,32],fftw3:[31,32],fftw:[23,30,32,33],field:[2,5,11,15,20,21,23,36,41,43,45],field_typ:19,fig:17,figur:[14,17,43],file1:2,file2:2,file:[0,2,4,9,10,11,12,13,15,17,18,20,22,23,30,31,32,36,39,41,42,44,45],filemod:2,filenam:[2,17,19,43],filename_in:2,filepath:2,fill:[6,42,43],filter:[2,17],find:[5,31,39,42,43],finder:39,fine:[21,31],finer:[3,21],finish:[42,43],first:[2,5,6,11,17,31,32,36,39,42,43],fit:2,fix:[4,10,17,41],flex:[10,13,43],flex_ecmwf:[4,10,13],flex_extract:[0,2,4,5,6,8,9,10,11,12,13,14,15,17,18,19,20,21,22,30,31,32,33,39,43,44],flex_extract_v7:[10,13,19,31,45],flex_extract_v:[4,13],flex_extract_vx:[5,7,8,9,11,12,13,18,30,31,32,42,43],flexcompil:[4,13,30,32],flexextract:[10,19,31,45],flexextractdir:2,flexpart:[2,6,11,15,17,20,21,22,31,41,43,44],flexpart_root:[4,13],flexpart_root_script:[4,13],flexpartdir:12,flextra:[2,20,21,41],flow:[2,11,12,20],flux:[2,5,15,21,38,43],fluxpar:[],fluxyyyymmddhh:17,flxacc2:17,fno:[30,31,32],follow:[2,5,7,12,13,15,17,18,19,21,30,31,32,33,39,42,43],font:0,fontpath:0,fopenmp:[30,31,32],for_develop:[0,45],forecast:[2,5,6,11,17,20,21,22,23,39,41,43,45],forecast_step:19,forescast:43,forg:31,forget:33,form:[6,42],format:[2,6,10,12,15,17,19,20,31,43],formul:17,fort:[2,13],fortran90:[12,21],fortran:[0,2,4,12,13,15,16,17,18,20,30,31,32,36,38,41,43],fortran_program:13,found:[2,5,6,9,13,19,20,21,30,31,43,44],four:[2,42],fp_root:2,fp_root_path:13,fp_root_script:13,fpdir:2,frac32:17,frac:17,framework:[13,30],free:42,frequent:[41,44],friendli:[],frog:[],from:[2,3,4,5,6,10,11,12,13,14,15,17,18,19,20,22,23,30,31,32,36,39,41,42,43,44],fromfil:2,fsr:19,ftime:2,ftp:32,ftrafo:[30,31,32],ftype:2,fulfil:17,full:[2,6,11,12,21,22,31,39,41,43],fulli:39,further:[2,31,32,43],futur:[6,21,43],g_i:17,g_ig_:17,gain:17,gannet:[],gap:43,gate:2,gatewai:[2,4,5,6,7,9,10,12,13,14,15,18,20,22,31,32,41,42],gateway_nam:[7,13],gatewayserv:43,gatwai:[],gauss:[2,5,6,8,10,21,38,43],gaussian:[2,6,10,19,21,23],gcc:31,gemacht:[],gen_docu:0,gener:[0,4,5,10,13,17,19,21,23,30,38,42,43],general:2,generate_retrieval_period_boundari:2,generel:[],genericsftp:[2,10,12,30],genshi:[4,10,13,30,31,32,36],geometr:2,geophys:35,geosci:17,geoscientif:[2,6,17],get:[2,6,9,15,30,31,32,36,39,42,43],get_cmdline_arg:2,get_dimens:2,get_inform:2,get_install_cmdline_arg:2,get_kei:2,get_list_as_str:2,getmarsdata:[],gfortran:[2,4,9,10,12,23,30,31,32,33],gid:[30,32],git:42,gitmob:42,give:[2,6,21,42,43],given:[2,5,10,14,17,21,31],glevelist:2,global:[5,6,8,21,39,43],gmd:[6,17],gnu:[30,31,32,42],goal:[],goe:2,going:[2,6,11],good:21,grant:42,graph:[],graphviz:0,grb:[2,19],greater:[6,11],green:[12,17],grep:[10,13,31,42],grib1:[2,5,6,10,15],grib2:[2,6,15],grib2flexpart:10,grib:[2,6,11,15,23,31],grib_api:[4,10,13,31,33,36],grib_l:19,grib_tabl:[],gribfil:[],gribmessag:11,grid:[2,3,5,6,10,17,19,20,21,23,31,43],grid_simpl:19,grid_typ:19,gridpoint:[],gridtyp:19,group:[2,4,5,12,13,14,22,31,42],groupnam:12,grphreal:[30,31,32],guarante:[2,11,12,17,43],guid:[23,36,41,43],guidanc:21,haimberg:[2,35],half:[2,6,11,17,21,43],hand:43,handl:[2,5,39,41],happen:0,hard:2,harmin:[],harmon:19,has:[0,2,4,6,8,9,10,11,12,13,14,17,20,21,22,30,31,32,39,42,43],hast:6,hat:[],have:[2,3,5,6,11,12,14,15,18,22,30,31,32,33,39,42,43,45],hcc:19,header:2,heat:[2,17,19],heavili:21,height:[17,19],help:[2,11,12,17,18,43,44],hemispher:43,henc:[17,43],her:[],here:[2,6,8,11,15,19,31,43,44],high:[6,11,13,21,31,43],higher:[2,21],highest:21,highli:21,highlight:43,highr:[8,43],hint:[5,33,39,41,44],his:[12,39],histor:21,hittmeir:[2,6,17],home:[4,10,12,13,14,23,30,31,32,42,43],horizont:[2,5,6,17,43],hoskin:6,host:[4,10,13,43],hostnam:[32,43],hour:[2,6,11,17,19,22,43],hourli:[6,22,43],how:[2,5,6,9,15,18,22,23,39,42,43],howev:[6,15,17,19,21,22,43],hpc:[21,43],hre:[23,43],http:[2,6,11,12,17,30,32,41,42,44],humid:19,hybrid:19,i32:[30,32],i_i:17,ia3:2,ice:[2,6,43],ich:[],idc:[],ideal:[],identif:2,identifi:[2,6,11,12,17,19],identificationkeyword:2,idir:2,idirectionincrementindegre:2,ids:[2,19],idx:[2,19],ifort:[9,12,31],iid:2,illustr:[],img:[10,12],implement:[17,43],impli:17,importantli:39,improv:[2,43],inbetween:6,includ:[6,11,12,13,30,31,32,42,44],incorpor:42,increas:[],incur:21,independ:39,index:2,index_fil:2,index_kei:2,index_v:2,indic:[2,5,17,19],individu:[2,4,6,10],ineffici:43,info:2,inform:[2,5,6,11,14,18,19,20,22,23,31,32,39,42,43,44],informt:2,init128:2,init:2,initi:[2,11,12,18,36],initialis:[2,36],input:[2,5,6,10,11,12,15,17,20,32,38,41,43],inputdir:[2,10,11,13,43],inputfil:[2,11],instal:[0,4,5,6,7,9,10,13,14,15,18,20,22,36,41,43],install_loc:2,install_target:[2,10,12],install_via_gatewai:2,installdir:[2,12,30,31,32,42],instanc:2,instantan:19,instead:[2,11,12,22],institut:39,instruct:[2,6,9,30,31,33,42,43],intact:11,integ:[2,6,11],integr:[2,17],intel:[4,10,13],intend:[6,8,11,14],intens:[],interact:30,interest:[39,42],interfac:[2,5,23,24,36,43],intergovernment:39,interim:[5,6,11,19,21,22,23,31,41,42],intermedi:2,intern:[2,11,12,41],internet:43,interpol:[2,6,10,11,17,19,31,43,45],interpret:18,interv:[2,3,6,12,17,19],introduc:[17,19,36,43],introduct:23,investig:39,involv:12,ipar:2,ipnam:32,isol:17,issu:41,iter:2,its:[2,10,11,13,17,18,19,21,42,43],itself:[2,10,43],jame:[2,17],januari:43,jasper:[30,32],jdirectionincrementindegre:2,jedem:[],job:[2,4,6,11,12,14,15,18,19,20,30,31,32,41],job_chunk:[2,10,11,43],job_fil:2,job_id:[2,4,13],job_templ:[2,10,11,12,30,31,32,43],jobfil:2,jobnam:[2,4,13],jobop:43,jobscript:[11,18,43],journal:17,jtemplat:2,june:[2,43],just:[2,3,6,12,19,31,43,44],k_i:17,keep:[2,13,17,42,43],kei:[2,31,42],kept:[6,43],keynam:2,keyvalu:2,keyword:[2,6,11,19,22,23,43],kind:[2,6,19,43],kingdom:[],km4a:[4,10,12,13],know:[31,39,43],known:[5,41],komponenten:[],korn:[2,4,10,12,18,20,36,43],kornshel:13,ksh:[13,18,43],kwd:2,label:[12,31],lagrangian:[2,6,17],larg:[2,6,11,17,19,36,43],larger:[6,11,21],last:[2,6,11,17,30,32,43],lat:[2,6,11,19,21],later:[2,31],latest:[22,42],latitu:2,latitud:[2,6,20,43],latitudeoffirstgridpointindegre:2,latitudeoflastgridpointindegre:2,latlonal:[],latter:12,lcc:19,ld_library_path:33,lead:[6,11,13,17,32,43],learn:39,least:[2,12],leav:11,leccod:[30,31,32],leccodes_f90:[30,31,32],left:[2,5,6,10,17,21,42,43],lemo:[30,32],lemosr64:31,length:[2,17,30,31,32,43],leo:[43,45],leopold:[2,35],less:21,let:11,letter:[2,11,12,19,41],level:[2,5,6,10,11,12,15,18,19,21,22,31,43],level_typ:19,levelist:[2,5,6,10,11,19,31,43],levtyp:[2,19,31],lfftw3:[30,32],lgrib_api:31,lgrib_api_f77:31,lgrib_api_f90:31,lib:[30,31,32,33],libeccod:[31,42],libemo:[30,31,32],librari:[4,10,12,14,20,23,31,32,41,42,44],licenc:[11,12,22,23,41],licens:[2,6,11,12,14,22,41],lies:2,light:12,like:[2,5,11,17,30,31,32,42,43],limit:[6,11,19,22,39,43],line:[2,5,11,12,13,15,17,18,19,22,30,31,32,42,43,45],linear:[2,6,17],linearli:17,link:[0,1,39,41,42,43],linux:[14,15,22,30,31,42,44],liquid:[2,6,43],list:[2,5,6,8,9,11,12,15,17,19,23,31,41,43],list_obj:2,littl:17,ljasper:[30,31,32],lnsp:[],load:[2,4,10,13,30,32,43],local:[2,5,6,7,9,11,12,14,22,30,32,33,36,41,42],localmachin:32,localserv:30,localus:32,locat:[2,7,11,12,43,45],log:[2,4,6,10,13,31,32,42,43,44],logarithm:19,logic:[2,10],login:[32,43],lon:[2,6,11,19,21],longer:[2,6,19,36,43],longitud:[2,6,20,43],longitudeoffirstgridpointindegre:2,longitudeoflastgridpointindegre:2,longiud:2,look:[2,30,32,43],lot:[21,43,44],lower:[2,5,6,10,17,21,43],lowest:19,lp64:[30,32],lpthread:[30,32],lrt:[],lsm:19,lsp:[17,19],m64:[30,31,32],machin:[2,4,10,12,13,14,15,31,32,42,43],made:[2,39,43],mag:[],magnitud:2,mai:[6,11,15,17,30,31,32,42,43],mail:[2,4,6,10,13,35,41,43],mailfail:[2,5,10,13,43],mailop:[2,5,6,10,13],main:[2,5,18,20,22,43],mainli:[19,43,44],maintain:17,make:[0,4,13,18,30,33,39],make_dir:2,makefil:[2,4,10,12,13,18,30,31,32,33],makefile_ecg:12,manag:[13,30,31,42],mani:[17,43],manipul:2,mar:[2,6,11,15,18,20,22,23,31,33,36,41,42,43],march:[2,22],mark:[4,5,10,13,17,19,43],mars_request:[2,6,11,15,19,43],marsclass:[2,10,19],marsfil:2,maschin:11,mask:43,mass:21,master:42,match:2,mathrm:17,matter:[2,12],max:[6,11],max_level_list:2,maxb:[2,13,19],maxim:2,maxima:17,maximum:[2,5,6,11,43],maxl:[2,13,19],maxstep:[2,5,6,10],mcc:19,mdpdeta:[2,13,19],mean:[2,4,13,17,19,43],measur:21,medium:[20,39,41],meet:[],member:[2,6,12,14,19,22,23,24,30,31,39,42,43],memberst:[2,6],memori:[6,11],mention:[2,13,14,39,43],merg:15,mess:42,messag:[2,11,12,19,21,30,31],meta:[2,13,19],metadiff:[2,13,19],metapar:[2,13,19],meteorolog:[2,17,19,20,35,39,41],meter:19,method:[2,5,6,11,17,19,22,38,39,43],metriken:[],mgauss:[2,13,19],might:[0,2,6,11,15,18,22,31,39,42,43],migrat:[2,23],min:17,mind:[6,43],minim:[20,42],minima:17,minimis:31,minimum:43,minut:[2,30,32],mismatch:43,missingvalu:2,mix:[19,43],mk_compilejob:2,mk_convert_build:2,mk_date:2,mk_env_var:2,mk_job_templ:2,mk_jobscript:2,mk_server:2,mk_tarbal:2,mkdir:[4,10,13],mlevel:[2,13,19],mlevelist:[2,13,19],mnauf:[2,13,19],mnt:19,mock:0,mod:[2,4,13,31],mode:[2,4,6,7,9,10,11,12,13,18,19,20,39,41,42,44],model:[2,6,15,17,19,20,21,22,23,41,43],modif:2,modifi:[2,17,22,31,43],modul:[4,10,13,14,30,32,42,43],modular:36,momega:[2,13,19],momegadiff:[2,13,19],moment:6,mon:17,monitor:43,monoton:[2,17],month:[11,31,43],monthli:6,more:[2,3,5,6,11,12,14,15,17,19,43],most:[2,6,13,39,43],mostli:[2,6,43],motiv:17,mountain:[2,11,12,41],move:[0,2,22],mreq_count:2,msc:[],msgatwai:30,msl:19,msmooth:[2,13,19],much:[39,44],multipl:[2,43],multipli:[6,21],muser:[10,13],must:[5,6,11,14,32,43],my_error:2,myuser:12,name:[2,4,5,6,9,10,11,12,13,17,19,22,30,31,32,42,43],name_of_this_fil:[4,10,13],namelist:[2,13,19],namespac:2,namgen:[13,19],nano:32,nas:[10,19,31,45],nation:39,natur:17,nearest:[],necessari:[0,2,3,4,5,6,9,10,11,12,13,14,18,20,30,31,32,33,43,44],nedit:31,need:[0,2,3,5,6,11,12,13,14,18,19,20,21,31,32,42,43],neg:[2,17],neglect:6,neighbour:[],net:[17,19],neu:[],nevertheless:2,newer:19,newest:43,newslett:43,next:[30,32,43],nfield:2,nicht:[],night:43,non:[2,6,17,43],noncycl:6,none:[2,5,6,10,11,12,17,19,30,31,32,43],none_or_int:2,none_or_str:2,normal:[4,6,10,13,21,43],normal_exit:2,north:[2,11],northern:[2,43],northward:[17,19],notabl:43,notat:17,note:[6,15,17,32,42,43],notif:[2,5],notifi:2,novemb:[2,21],now:42,nowadai:43,nsss:[17,19],number:[2,3,4,5,6,8,9,10,11,13,17,18,19,20,21,31,36,43],numer:39,nummern:[],numpi:[2,30,31,32],object:2,observ:2,obtain:[17,42],obvious:17,occur:[2,17],octahedr:23,octob:11,odir:2,off:[2,5,6,19],often:21,og_orolsm__sl:19,old:[0,2,6,11,17,36,43],older:[6,15,43],omega:[2,5,6,10,21,38,43],omegadiff:[2,5,6,10,21,43],omegayymmddhh:[6,21],onc:[11,43],one:[2,5,6,11,12,17,18,19,32,33,42,43],ones:[17,32],ongo:[],onli:[2,3,5,6,11,12,17,19,21,22,32,42,43,44],onlin:43,onward:6,open:[2,20,31,32,41,43],opend:12,oper:[2,5,6,8,10,11,12,17,21,23,31,39,41,42],operation:6,oportun:22,opportun:[43,45],opt:19,optim:[12,21,43],optimis:15,option:[2,5,6,15,17,19,21,33,36,42,43],optionalind:5,orang:12,order:[2,5,17],org:[2,6,11,12,17,41],organis:39,origin:[2,6,11,17,19,43,45],orographi:19,orolsm:[],other:[1,2,5,6,11,17,31,39,42,43],otherwis:[2,43],our:[23,42],out:[2,4,6,10,13,17,31,42,43],output:[2,4,5,6,10,11,12,13,17,30,31,32,36,38,41,42,43,44],outputdir:[2,10,11,13,43],outputfilelist:2,outsid:31,over:[2,17,39,43],overal:[2,19],overlap:6,overrid:[3,11],overrul:5,overview:[8,14,15,17,23,38,41,42],overwrit:[0,2,43],overwritten:[2,18,43],own:[32,39,42],p_a:17,p_ac:[],p_b:17,p_bd:[],p_c:17,p_d:17,packag:[0,4,10,13,20,30,31,41,42],package_nam:42,packingtyp:19,page:[30,42],panel:42,par:2,parallel:19,param1:43,param2:43,param:[2,19,31],paramat:2,paramet:[2,3,4,5,8,10,13,15,17,18,19,20,23,30,31,32,39,41,42],parameterid:[],parameteris:43,parameterlist:[11,12],parametern:[],parameternam:2,paramx:43,parent:[2,11,19],part:[2,17,19,20,31,32],parti:[14,20,23,41],particl:[2,6,17],pass:[2,42],passcod:30,password:[30,32],path:[0,2,4,6,8,10,11,12,13,14,31,32,33,42,43],path_flexextract_dir:2,path_fortran_src:2,path_input_dir:2,pattern:[2,43],paul:17,pbs_jobid:[10,13],pdf:21,pep8:36,per:[2,5,6,11,15,19,43],perform:[2,13,15,19,21],period:[2,5,6,11,17,30,39,43],person:12,perturb:[6,19,43,45],petra:2,phgrreal:[30,31,32],philipa8:31,philipp:[2,5,6,11,12,17,35],physic:[35,39],pid:[19,43],piec:[17,19,31],piecewis:17,pip:[0,31,42],place:[2,12,13,14,30,43,44],placehold:[13,32],plan:[6,21],platform:42,pleas:[5,9,14,15,19,21,30,31,32,42,43,44,45],plot:23,plu:17,png:0,point:[2,11,17,19,43],pointer:[30,31,32],polynomi:[2,17],posit:[2,6,13,17],posnam:[30,31,32],possess:[],possibl:[2,5,6,8,11,12,17,21,22,31,33,42,43,44,45],post:[2,6,15,31],postprocess:2,pp_id:[11,43],ppid:[2,11,19],pre:17,precalcul:6,precip:19,precipit:[2,5,6,11,23,36,43],precis:33,preconvert:[1,30,31,32],predict:[39,43],prefar:42,prefer:[6,30,31,32],prefix:[2,5,6,10,19,21],prep:[],prepar:[0,2,4,6,9,10,11,12,13,14,15,20,26,41,42],prepare_flexpart:11,preprocess:[],preprocessor:44,present:[7,12,23,30,32,42,43],preserv:17,pressur:[2,19,21,22,31],pressure_level:31,previou:[18,21],prgenv:[4,10,13],print:[2,4,13,43],print_infodata_csv:2,prior:[17,21],problem:[2,17,36,42,43,44],procedur:17,process:[2,4,6,7,9,10,11,12,13,14,15,17,18,19,22,31,36,42,43,44],process_output:2,prod:2,produc:[17,19,21,39,43],product:[2,42,43],product_typ:31,prof:[],progam:42,program:[0,4,9,11,12,13,17,18,20,21,30,31,36,41,43],progress:[15,43],prompt:30,proper:18,properli:[2,15,42,44],properti:[2,19],propos:17,proposit:44,prot:[10,13,43],protocol:43,provid:[2,14,18,20,22,31,32,39,42,43,44],publicli:43,publish:[17,39],pull:31,pure:[2,6,11,15,43],purefc:[2,10],purpos:[2,6],put:[2,6,11,12,13,19],put_file_to_ecserv:2,pya:[],pyb:[],pyc:[],pycallgraph:0,pyd:[],pylint:0,pyrevers:0,pyscript:11,pytest:0,python3:[4,10,13,18,30,31,32,36,42,43],python:[0,4,10,11,12,13,15,16,17,18,19,20,23,30,31,32,33,36,38,42,43],pythonxxxxx:43,qos:[4,10,13],quad:17,quantiti:[2,6,17],question:[41,44],queue:[2,4,10,11,12,13,15,30,43],queuenam:[4,10,13],queues_list:2,quick:[8,18,39,41,42],quick_start:45,quickli:[13,43],quota:43,r64:[4,10,13,30,32],radiat:[2,17,19],radon:[],raid60:[10,31,45],rainfal:2,rais:[2,17],rang:[2,6,12,20,31,39,41,43],rare:43,rate:17,rather:21,raw:[2,11,15],reach:18,read:[2,6,12,13,15,20,21,32,33,39,42,43],read_ecenv:2,readi:[2,6,11],readlatlon:42,readspectr:42,real:[23,30,31,32,43],real_tim:23,realis:17,realiti:17,realli:[21,43],reanalysi:[6,11,21,23,31,42],reason:[2,6,11,17,19,43],receiv:[15,30,43,44],recent:[10,43],recommend:[6,13,17,19,21,31,43],reconstruct:[2,17],record:42,rectangular:12,red:17,reduc:[19,21,23,43],ref:[13,30,31],refactor:36,refer:[2,39],reflect:[],regard:[5,18,44],regardless:42,region:21,regist:[22,31,33,42],registr:[6,14,22,23,31,33,41,44],regress:[36,41],regular:[2,20,43],regular_l:19,regularli:39,rel:[17,43],relat:43,releas:[2,41,42,43,44],relev:[2,5],reli:42,remain:[2,17],rememb:42,remot:[2,4,6,7,9,10,12,13,14,15,18,20,30,41,42],remota:12,remov:[2,3,17],remove_old:2,renam:0,renew:30,repeat:2,repo:42,report:[2,41],repositori:42,repr:[2,19],repres:[2,17,19,22,23,42,43],represent:2,request:[2,4,5,6,10,11,13,15,17,22,36,43],request_numb:[2,19],requir:[2,13,14,17,21,30,31,32,41,42,43],rerun:11,research:39,resid:[],resol:[2,5,6,10,19,21,43],resolut:[3,5,6,11,21,22,39,43],resolv:21,respect:[2,17,19,42],respectivlei:18,respons:43,rest:[2,6],restrict:21,restructur:36,result:[2,15,19,21,43],retriev:[2,5,6,11,14,15,17,18,19,20,21,22,31,33,36,39,41,42,43,45],return_list:2,review:6,revis:36,revtriev:2,right:[2,5,6,10,17,21,22,30,31,33,42,43,44,45],rippl:[],rla0:[2,13,19],rla1:[2,13,19],rlo0:[2,13,19],rlo1:[2,13,19],root:[2,4,12,13,18,31,32,42,43],round:12,rpath:[30,32],rpm:42,rrint:[2,5,6,10,11,43],rst:45,rthl:43,rudimentari:12,run:[2,5,6,7,8,10,13,15,18,19,30,31,42,43,44],run_loc:[15,43],runtim:10,rwgrib2:[30,31,32,36],rwxr:[30,32],rwxrwxr:31,sabin:2,same:[2,6,11,22,30,31,33,43],sampl:[2,31],sardeshmukh:6,satisfactori:[],save:[11,19,21,31,43],sbatch:[4,10,13],scale:[2,11,17,19],scaveng:17,scenario:[14,17,43],schemat:17,scheme:[2,6,17,19,43],scientif:23,scope:6,scp:32,scratch:[4,10,13,43],screenshot:43,scriot:0,script:[2,5,6,10,13,14,15,17,18,19,20,21,23,30,31,32,36,42,43,44],scroll:42,sdor:19,second:[6,11,30,31,32],section:[5,12,14,18,19,22,31,36,39,42,43],see:[2,5,6,9,11,12,14,15,18,19,20,21,22,24,30,31,32,42,43],seem:43,seen:18,seibert:[2,6,17],select:[2,3,5,6,11,12,14,19,22,30,32,39,41,42],selectwher:2,send:[2,4,10,11,12,13,15,18,21,30,41,43,44],send_mail:2,sens:[],sensibl:[2,17,19],sent:2,separ:[5,19],sepeart:2,seper:[2,6,43],septemb:[6,12,21],seqdiag:0,seqdiag_fontpath:0,sequenc:15,seri:[2,17],serv:[18,19,20,23,41,43],server:[2,4,5,6,7,9,10,11,12,13,14,15,18,20,22,30,31,32,42,43],servic:[30,39],session:[4,10],set:[0,2,4,5,6,8,10,11,12,13,17,18,19,20,21,24,30,31,32,33,36,42,43,44],set_kei:2,setup:[14,15,18,30,31,32,42,43,45],setup_controldata:2,sever:[19,42],sfc:[19,31],sgn:17,shade:17,share:[0,44],she:14,shell:[2,4,10,11,12,15,18,20,30,31,36,42,43],shift:17,shorten:43,shortli:43,shortnam:19,should:[0,2,6,9,12,13,17,19,21,30,31,32,33,36,42,43],shouldn:6,show:[7,11,12,15,17,43],shown:[9,17,31,43],sid:[],side:42,sign:[4,5,10,13,42],signal:43,silent_remov:2,similar:14,simpl:[6,17,31],simplest:17,simplic:[],simplifi:36,simul:2,sinc:[2,12,15,19,21,31,43,44],singel:[],singl:[2,4,10,11,13,15,19,33,42,43],sip:[],site:[30,31],situat:[],size:43,sketch:[12,14,15],skip:[2,31],skt:19,slope:17,slurm:[13,23],small:[31,43],smaller:[2,6,11,19],smooth:[2,5,6,10,17,21,43],softwar:[2,6,12,13,14,20,21,23,30,31,32,41,42],solar:[2,17,19],sole:[6,19],solut:[2,44],some:[0,2,4,5,6,10,11,12,13,14,15,18,19,20,22,31,32,39,41,42,44,45],someth:43,sometim:[6,43],soon:[6,43],sort:[2,5],sourc:[0,2,4,9,10,11,12,13,18,20,31,33,36,41,42,43,45],south:[2,11],souther:2,southern:2,space:[2,5,11,17,43],spar:2,spatial:[5,6,39],spatio:[],spdx:[11,12],speak:42,speci:17,special:39,specialis:43,specif:[2,4,5,6,10,11,13,14,15,17,19,21,36,39,41,42],specifc:[2,11],specifi:[2,6,11,12,17,30,31,32,39,43],spectral:[2,6,20,21,43],speed:43,sphere:6,spheric:19,sphinx:[36,45],sphinxcontrib:0,split:[15,17,19],spread:[],sqrt:17,src:[],src_path:2,srvx8:[10,12],ssh:[32,43],sshf:[17,19],ssr:[17,19],sss:6,stage:[],stamp:19,stand:[],standard:[2,30,31,32,42,43],start:[2,4,5,6,10,11,12,13,18,19,30,31,32,33,39,41,42],start_dat:[2,5,6,10,11,17,43],start_period:2,state:[2,12,14,22,23,24,30,31,39,42,43],statement:[2,30,32],statist:42,statu:[15,42],steer:2,step:[2,3,5,6,10,11,13,15,17,19,24,30,31,33,43],steprang:[2,11,19],stick:[],still:[3,15,21,43],stl1:19,stop:2,storag:[2,5],store:[2,6,10,11,12,15,19,21,22,23,31,42,43],str:2,str_of_list:2,straightawai:43,straightforeward:43,stream:[2,5,6,10,19,31,36,43],stress:[2,17,19],strict:[],strictli:[],string:[2,5,6,11,12],structur:[10,36,39,43],studi:21,style:36,sub:[2,17,19],subgrid:[2,11],subinterv:17,subject:[2,30,32,43],submiss:[2,4,10,12,20,43],submit:[4,5,10,12,13,14,15,18,19,30,32,43,44],submit_job_to_ecserv:2,subprocess:2,subsect:21,subsequ:[6,43],subset:[6,11,43],substitut:[2,4,9,10,13,31,32,36,43],subtract:[6,43],succeed:[30,31],success:[4,13,19,30,32],success_mod:2,successful:42,successfulli:[18,42],sudo:[],suffici:[],suggest:31,suit:[6,43],suitabl:[],sum:[2,6,18,43],supplement:19,support:[2,17,23,39,41,42,43],suppos:2,sure:31,surfac:[2,6,15,17,19,21,22],swvl1:19,symmetri:17,syntax:[2,6],synthes:[6,36],system:[2,4,6,10,11,13,20,21,30,31,32,41,42,43],sytem:[30,31],t1279:[21,43],t799:21,tab:42,tabl:[2,5,17,19,41,42,43],table128:2,take:[2,31,43],taken:[2,6,18,19,39,43],tar:[2,4,12,13,32,42],tarbal:[2,30,32],tarball_path:2,tarfil:32,target:[2,12,19,30,31,32],task:[2,18,20,43],tcc:19,team:41,technic:23,tell:[2,43,45],temp:[2,4,10,11,43],temperatur:[19,31],templat:[2,4,5,7,10,11,12,18,30,31,32,36,43],tempor:[5,6,17,19,22,43],temporal_properti:19,temporari:[2,6,11,43],tendenc:21,tenth:6,term:[42,43],termin:[30,31],test:[0,2,5,6,12,13,19,22,33,36,41,43],textbf:17,textrm:17,than:[2,6,11,19,21,31,44],thei:[0,2,5,6,9,11,12,15,17,18,19,31,39,43],them:[0,2,6,11,12,15,17,18,19,39,43],therebi:[17,21],therefor:[0,2,6,17,18,19,31,39,42,43],thi:[0,2,4,5,6,7,8,10,11,12,13,14,17,18,19,21,22,30,31,32,33,39,41,42,43,44,45],thick:17,thing:5,think:[2,42],third:[14,20,23,41],those:[5,43],thousandth:6,three:[2,11,17],through:[2,5,22,24,30,42,43],throughout:17,thu:[17,43],ticket:41,time:[2,3,4,5,10,11,13,15,17,19,21,23,31,33,39,43,44],timeseri:[2,17],timespan:[2,17],timestamp:2,titl:[],tld:[30,32],tmc:[10,31,45],tmpdir:[10,13],to_list:2,to_param_id:2,to_param_id_with_tablenumb:2,todai:43,todo:[],togeth:[2,12,15,19,42,43],token:30,too:[6,11,17,31,43],took:[],tool:[4,10,14,15,43],toolkit:22,top:[11,12,18],topic:39,total:[19,43],touch:43,trace:17,train:23,transfer:[2,5,6,7,12,13,15,19,30,32,43],transferd:[],transform:2,transport:[20,41],trapezoid:12,treat:[],treatment:39,tree:43,tri:2,triangular:[2,6],trigger:[2,21],troubl:43,troubleshoot:[23,43],truetyp:0,truli:[],truncat:[2,6],ttf:0,tupl:2,turbul:[17,19],turnaround:[],tutori:[],twice:43,twiceadai:[8,43],two:[2,6,11,12,14,17,18,19,21,22,31,42,43],type:[0,2,3,4,5,6,10,11,13,17,18,19,30,31,32,42,43],typeoflevel:19,typic:[15,19,23,43],ubuntu:[30,31],udoc:2,uid:[30,32],un_tarbal:2,unavail:44,unchang:17,und:[],under:[0,2,11,12,13,14,17,27,28,30,31,37,38,40,41,43],underscor:[30,31,32],understand:[5,13,18,20,39,43],understood:[],underw:43,undesir:17,unfortun:[17,22],uniqu:[2,19],unit:[0,17,21,36],univ:[],univers:[2,35],univi:[10,12,35,44],unix:44,unless:6,unload:[4,10,13],unrealist:17,unreason:36,untar:[2,4,12,32,42],until:[6,11,17,22,43],updat:41,upfront:[2,6,43],upgrad:36,upper:[2,5,6,10,21,43],upstream:43,upto:2,usa:[2,11,12,41],usag:2,use:[0,2,6,9,12,13,18,20,21,22,30,31,32,33,36,39,42,43],usecas:[],used:[2,5,6,8,9,11,12,13,14,17,19,20,31,32,36,39,42,43,44],useful:[5,6,11,39,43,45],user:[2,4,5,10,11,12,13,14,18,20,22,23,24,30,31,32,33,36,39,42,43,44,45],user_group:[7,13],user_nam:[7,13],usergroup:13,usernam:13,uses:[0,4,10,17,22,30,32,43],using:[2,6,11,12,17,30,31,32,42,43],usr:[0,4,10,13,30,31,32],usual:[5,6,11,13,15,19,31,43],utc:[6,11,43],util:[2,15],uza:35,v10:19,v20_update_protocol:21,v30_update_protocol:21,v40_update_protocol:21,v60_update_protocol:21,valid:[2,6,12,19,32,43],valu:[2,3,5,6,8,10,11,12,13,17,18,21,30,32,43],valuer:2,vanish:17,vari:[6,31,43],variabel:[4,10],variabl:[2,6,10,11,13,17,31,33,36,43],varianc:5,variat:[6,19],veloc:[15,19,20,43],veri:[2,6,11,17,21,31,39,43],version:[2,3,4,6,9,10,12,13,15,18,21,31,33,36,42,43,44],version_numb:13,versu:[],vertic:[5,11,15,20,38,39,43],via:[2,4,10,11,13,14,15,22,23,30,31,32,36,43],vienna:[2,35],view:[2,11,12,13,41,44],virtual:42,visit:[2,11,12,30,41],vol:6,von:[],wai:[13,15,17,21,22,30,31,39,42,43],wait:22,want:[6,17,20,43],warn:[2,31],water:[2,6,19,43],wave:21,weather:[6,20,39,41],web:[2,6,11,14,22,23,24,33,36,42,43],webapi:[2,6],webmar:[],webserv:22,websit:[2,30,31,42,43,44],wedg:17,welch:[],well:[2,6,15,21,39,42,43],were:[2,6,11,12,19,36,43],west:[2,11],western:2,wet:17,wether:[2,12],wget:[],what:[5,23,31,41,43],whatev:43,when:[2,4,6,10,17,43,45],whenev:21,where:[2,6,9,11,12,13,17,19,20,21,31,42,43],wherea:[6,15],wherebi:11,wherekei:2,wherekeynam:2,wherekeyvalu:2,whether:42,which:[0,2,3,4,5,6,7,9,10,11,12,13,14,15,17,18,19,20,21,22,30,31,36,39,42,43,44],whith:10,who:[20,43,45],whole:[2,17,39,43,44],whose:19,why:[17,43,45],wie:[],wiki:[2,6,32],wil:2,wildcard:43,wind:[5,19,43],window:[30,31,43],wish:42,within:[2,4,6,10,11,17,30,32,43],without:[2,13,22,33,42,43],word:2,work:[0,2,7,10,11,12,13,14,15,19,20,22,31,41,42,43],workdir:[4,10,13],workload:13,workspac:[10,19,43],workstep:20,would:[6,11,22,30,31,43,45],wouldn:[],wrap:[11,12,18,20],wrf:[2,5,10],write:[2,6,44],write_namelist:2,write_reqhead:2,written:[2,6,21],www:42,x86_64:31,xvf:[4,13,32,42],xxx:19,xxxx:6,xxxxx:43,xxyymmddhh:2,year:[31,43],yet:43,yield:[2,21],you:[0,3,5,6,21,24,30,31,32,33,42,43,44],your:[24,30,31,32,42,43,44],yourself:24,yymmdd:[6,19],yymmddhh:[6,19,21],yyyymmdd:[2,6,11],yyyymmddhh:[17,19],zamg:[36,44],zero:[2,17,21],zonal:21},titles:["Update Documentation","Fortran\u2019s Auto Generated Documentation","Python\u2019s Auto Generated Documentation","CONTROL file changes","The Compilation Jobscript <code class=\"docutils literal notranslate\"><span class=\"pre\">compilejob.ksh</span></code>","The CONTROL file","The CONTROL parameters","ECMWF User Credential file <code class=\"docutils literal notranslate\"><span class=\"pre\">ECMWF_ENV</span></code>","CONTROL file examples","The Fortran Makefile - <code class=\"docutils literal notranslate\"><span class=\"pre\">CONVERT2</span></code>","The Jobscript <code class=\"docutils literal notranslate\"><span class=\"pre\">job.ksh</span></code>","The executable Script - <code class=\"docutils literal notranslate\"><span class=\"pre\">run.sh</span></code>","The Installation Script - <code class=\"docutils literal notranslate\"><span class=\"pre\">setup.sh</span></code>","Templates","Application Modes","Program Flow","Auto Generated Documentation","Disaggregation of Flux Data","Control & Input Data","Output Data","Overview","Vertical Coordinate","Access Modes","Link Collection for Quick finder","Hints to specify dataset retrieval","Available Datasets for Member State users","Available Datasets for Public users","Metrics","Static Code Analysis","Testcases","Gateway mode installation","Local mode installation","Remote mode installation","FAQ - Frequently asked questions","Known Bugs and Issues","Developer Team","Changelog","Developer Guide","Documentation","ECMWF Data","Evaluation","Welcome to <code class=\"docutils literal notranslate\"><span class=\"pre\">flex_extract</span></code>\u2019s user documentation!","Installation","Quick Start","Support","ToDos"],titleterms:{"class":2,"new":[19,36],"public":[26,42,43],"static":28,CDS:31,The:[4,5,6,9,10,11,12],access:22,adapt:[],addit:[0,6,19],adjust:43,agre:[],agreement:42,analysi:28,api:31,applic:[14,15],ask:33,auto:[1,2,16],avail:[24,25,26],block:0,bug:[34,36,44],calcul:21,can:[24,33],cera:43,chang:[3,36],changelog:36,check:2,code:28,collect:23,combin:[42,43],comparison:29,compil:4,compilejob:[4,13],content:[7,11,12,19],continu:21,control:[3,5,6,8,18,43],controlfil:2,convert2:[9,19],convert:13,coordin:21,credenti:7,dai:[],data:[6,17,18,19,24,25,39,43],dataset:[24,25,26,42,43],definit:43,delight:[],depend:[30,31,32,42],develop:[35,37],diagramm:0,differ:15,disagg:[],disaggreg:[2,17,19],distribut:33,document:[0,1,2,16,38,41],doe:[4,10],domain:6,done:[],download:42,ecflexpart:2,ecmwf:[7,31,39,42],ecmwf_env:[7,13],ensembl:19,environ:[30,31,32],equat:21,era:43,evalu:40,exampl:[4,5,8,10,15],execut:11,faq:[33,44],featur:[36,43],field:[6,17,19],file:[3,5,6,7,8,19,21,29,43],find:24,finder:23,fix:36,flex_extract:[41,42],flexpart:[19,42],flow:15,flux:[6,17,19],forecast:19,format:5,fort:19,fortran:[1,9,19,42],frequent:33,from:[21,33],frozen:[],full:42,gatewai:[30,43],gener:[1,2,6,15,16],get_mars_data:2,grib:[19,29],gributil:2,guid:37,half:[],hint:[24,43],horizont:21,host:[],how:24,index:19,input:[18,19],instal:[2,12,30,31,32,33,42],interim:43,issu:[34,44],job:[10,13,43],jobscript:[4,10],known:[34,44],ksh:[4,10],level:25,librari:33,licenc:42,link:23,list:44,local:[15,31,43],mail:44,makefil:9,mar:[19,21,29],marsretriev:2,member:[15,25],method:[],metric:27,mix:[],mode:[14,15,22,30,31,32,43],model:25,modul:2,need:[],old:[],older:17,onlin:0,oper:43,option:[11,12],out:24,output:[19,21],overview:20,packag:33,paramet:[6,11,12,21,43],parti:33,pre:21,precip:[],precipit:[17,19],predict:19,prepar:[21,30,31,32,43],prepare_flexpart:2,program:[2,15,19,42],pure:19,python:2,question:33,quick:[23,43],registr:42,releas:36,remot:[32,43],report:44,request:[19,29],requir:[],rest:17,retriev:24,run:11,script:[4,11,12],section:6,select:43,sequenc:0,server:[],set:15,setup:12,softwar:0,some:43,specif:43,specifi:24,sphinx:0,standard:19,start:43,state:25,submiss:11,submit:[2,11],support:44,surfac:25,system:44,team:35,temp:13,templat:13,temporari:19,test:[30,31,42],testcas:29,third:33,ticket:44,time:6,todo:[43,45],tool:2,uiofil:2,updat:0,usag:[11,12],user:[6,7,15,25,26,41],using:21,veloc:21,version:17,versu:[],vertic:[6,19,21],web:31,welcom:41,what:[4,10,24,33],why:[],wind:[6,21],workflow:15}}) \ No newline at end of file +Search.setIndex({docnames:["Developers/gen_docu","Documentation/Api/api_fortran","Documentation/Api/api_python","Documentation/Input/changes","Documentation/Input/compilejob","Documentation/Input/control","Documentation/Input/control_params","Documentation/Input/ecmwf_env","Documentation/Input/examples","Documentation/Input/fortran_makefile","Documentation/Input/jobscript","Documentation/Input/run","Documentation/Input/setup","Documentation/Input/templates","Documentation/Overview/app_modes","Documentation/Overview/prog_flow","Documentation/api","Documentation/disagg","Documentation/input","Documentation/output","Documentation/overview","Documentation/vertco","Ecmwf/access","Ecmwf/ec-links","Ecmwf/hintsecmwf","Ecmwf/msdata","Ecmwf/pubdata","Evaluation/metrics","Evaluation/staticcode","Evaluation/testcases","Installation/gateway","Installation/local","Installation/remote","Support/faq","Support/known_bugs_issues","authors","changelog","dev_guide","documentation","ecmwf_data","evaluation","index","installation","quick_start","support","todo"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.index":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["Developers/gen_docu.rst","Documentation/Api/api_fortran.rst","Documentation/Api/api_python.rst","Documentation/Input/changes.rst","Documentation/Input/compilejob.rst","Documentation/Input/control.rst","Documentation/Input/control_params.rst","Documentation/Input/ecmwf_env.rst","Documentation/Input/examples.rst","Documentation/Input/fortran_makefile.rst","Documentation/Input/jobscript.rst","Documentation/Input/run.rst","Documentation/Input/setup.rst","Documentation/Input/templates.rst","Documentation/Overview/app_modes.rst","Documentation/Overview/prog_flow.rst","Documentation/api.rst","Documentation/disagg.rst","Documentation/input.rst","Documentation/output.rst","Documentation/overview.rst","Documentation/vertco.rst","Ecmwf/access.rst","Ecmwf/ec-links.rst","Ecmwf/hintsecmwf.rst","Ecmwf/msdata.rst","Ecmwf/pubdata.rst","Evaluation/metrics.rst","Evaluation/staticcode.rst","Evaluation/testcases.rst","Installation/gateway.rst","Installation/local.rst","Installation/remote.rst","Support/faq.rst","Support/known_bugs_issues.rst","authors.rst","changelog.rst","dev_guide.rst","documentation.rst","ecmwf_data.rst","evaluation.rst","index.rst","installation.rst","quick_start.rst","support.rst","todo.rst"],objects:{"":{ControlFile:[2,0,0,"-"],EcFlexpart:[2,0,0,"-"],GribUtil:[2,0,0,"-"],MarsRetrieval:[2,0,0,"-"],UioFiles:[2,0,0,"-"],checks:[2,0,0,"-"],disaggregation:[2,0,0,"-"],get_mars_data:[2,0,0,"-"],install:[2,0,0,"-"],prepare_flexpart:[2,0,0,"-"],submit:[2,0,0,"-"],tools:[2,0,0,"-"]},"ControlFile.ControlFile":{"public":[2,2,1,""],accmaxstep:[2,2,1,""],acctime:[2,2,1,""],acctype:[2,2,1,""],accuracy:[2,2,1,""],addpar:[2,2,1,""],area:[2,2,1,""],assign_args_to_control:[2,3,1,""],assign_envs_to_control:[2,3,1,""],basetime:[2,2,1,""],cds_api:[2,2,1,""],check_conditions:[2,3,1,""],controlfile:[2,2,1,""],cwc:[2,2,1,""],dataset:[2,2,1,""],date_chunk:[2,2,1,""],debug:[2,2,1,""],destination:[2,2,1,""],doubleelda:[2,2,1,""],dpdeta:[2,2,1,""],dtime:[2,2,1,""],ec_api:[2,2,1,""],ecfsdir:[2,2,1,""],ecgid:[2,2,1,""],ecstorage:[2,2,1,""],ectrans:[2,2,1,""],ecuid:[2,2,1,""],end_date:[2,2,1,""],eta:[2,2,1,""],etadiff:[2,2,1,""],etapar:[2,2,1,""],exedir:[2,2,1,""],expver:[2,2,1,""],flexextractdir:[2,2,1,""],format:[2,2,1,""],gateway:[2,2,1,""],gauss:[2,2,1,""],gaussian:[2,2,1,""],grid:[2,2,1,""],inputdir:[2,2,1,""],install_target:[2,2,1,""],installdir:[2,2,1,""],left:[2,2,1,""],level:[2,2,1,""],levelist:[2,2,1,""],logicals:[2,2,1,""],lower:[2,2,1,""],mailfail:[2,2,1,""],mailops:[2,2,1,""],makefile:[2,2,1,""],marsclass:[2,2,1,""],maxstep:[2,2,1,""],number:[2,2,1,""],omega:[2,2,1,""],omegadiff:[2,2,1,""],oper:[2,2,1,""],outputdir:[2,2,1,""],prefix:[2,2,1,""],purefc:[2,2,1,""],request:[2,2,1,""],resol:[2,2,1,""],right:[2,2,1,""],rrint:[2,2,1,""],smooth:[2,2,1,""],start_date:[2,2,1,""],step:[2,2,1,""],stream:[2,2,1,""],time:[2,2,1,""],to_list:[2,3,1,""],type:[2,2,1,""],upper:[2,2,1,""],wrf:[2,2,1,""]},"EcFlexpart.EcFlexpart":{"public":[2,2,1,""],accmaxstep:[2,2,1,""],acctime:[2,2,1,""],acctype:[2,2,1,""],accuracy:[2,2,1,""],addpar:[2,2,1,""],area:[2,2,1,""],basetime:[2,2,1,""],calc_extra_elda:[2,3,1,""],create:[2,3,1,""],dataset:[2,2,1,""],dates:[2,2,1,""],deacc_fluxes:[2,3,1,""],dtime:[2,2,1,""],expver:[2,2,1,""],gaussian:[2,2,1,""],glevelist:[2,2,1,""],grid:[2,2,1,""],inputdir:[2,2,1,""],level:[2,2,1,""],levelist:[2,2,1,""],marsclass:[2,2,1,""],mreq_count:[2,2,1,""],number:[2,2,1,""],outputfilelist:[2,2,1,""],params:[2,2,1,""],process_output:[2,3,1,""],purefc:[2,2,1,""],resol:[2,2,1,""],retrieve:[2,3,1,""],server:[2,2,1,""],stream:[2,2,1,""],types:[2,2,1,""],write_namelist:[2,3,1,""]},"GribUtil.GribUtil":{copy_dummy_msg:[2,3,1,""],get_keys:[2,3,1,""],index:[2,3,1,""],set_keys:[2,3,1,""]},"MarsRetrieval.MarsRetrieval":{"public":[2,2,1,""],accuracy:[2,2,1,""],area:[2,2,1,""],data_retrieve:[2,3,1,""],dataset:[2,2,1,""],date:[2,2,1,""],display_info:[2,3,1,""],expver:[2,2,1,""],gaussian:[2,2,1,""],grid:[2,2,1,""],levelist:[2,2,1,""],levtype:[2,2,1,""],marsclass:[2,2,1,""],number:[2,2,1,""],param:[2,2,1,""],print_infodata_csv:[2,3,1,""],repres:[2,2,1,""],resol:[2,2,1,""],server:[2,2,1,""],step:[2,2,1,""],stream:[2,2,1,""],target:[2,2,1,""],time:[2,2,1,""],type:[2,2,1,""]},"UioFiles.UioFiles":{delete_files:[2,3,1,""],files:[2,2,1,""],path:[2,2,1,""],pattern:[2,2,1,""]},ControlFile:{ControlFile:[2,1,1,""]},EcFlexpart:{EcFlexpart:[2,1,1,""]},GribUtil:{GribUtil:[2,1,1,""]},MarsRetrieval:{MarsRetrieval:[2,1,1,""]},UioFiles:{UioFiles:[2,1,1,""]},checks:{check_accmaxstep:[2,4,1,""],check_acctime:[2,4,1,""],check_acctype:[2,4,1,""],check_addpar:[2,4,1,""],check_area:[2,4,1,""],check_basetime:[2,4,1,""],check_dates:[2,4,1,""],check_grid:[2,4,1,""],check_job_chunk:[2,4,1,""],check_len_type_time_step:[2,4,1,""],check_levels:[2,4,1,""],check_logicals_type:[2,4,1,""],check_mail:[2,4,1,""],check_maxstep:[2,4,1,""],check_number:[2,4,1,""],check_pathes:[2,4,1,""],check_ppid:[2,4,1,""],check_public:[2,4,1,""],check_purefc:[2,4,1,""],check_queue:[2,4,1,""],check_request:[2,4,1,""],check_step:[2,4,1,""],check_time:[2,4,1,""],check_type:[2,4,1,""]},disaggregation:{IA3:[2,4,1,""],dapoly:[2,4,1,""],darain:[2,4,1,""]},get_mars_data:{check_dates_for_nonflux_fc_times:[2,4,1,""],do_retrievement:[2,4,1,""],get_mars_data:[2,4,1,""],main:[2,4,1,""],mk_dates:[2,4,1,""],mk_server:[2,4,1,""],remove_old:[2,4,1,""],write_reqheader:[2,4,1,""]},install:{check_install_conditions:[2,4,1,""],del_convert_build:[2,4,1,""],get_install_cmdline_args:[2,4,1,""],install_local:[2,4,1,""],install_via_gateway:[2,4,1,""],main:[2,4,1,""],mk_compilejob:[2,4,1,""],mk_convert_build:[2,4,1,""],mk_env_vars:[2,4,1,""],mk_job_template:[2,4,1,""],mk_tarball:[2,4,1,""],un_tarball:[2,4,1,""]},prepare_flexpart:{main:[2,4,1,""],prepare_flexpart:[2,4,1,""]},submit:{main:[2,4,1,""],mk_jobscript:[2,4,1,""],submit:[2,4,1,""]},tools:{clean_up:[2,4,1,""],execute_subprocess:[2,4,1,""],generate_retrieval_period_boundary:[2,4,1,""],get_cmdline_args:[2,4,1,""],get_dimensions:[2,4,1,""],get_informations:[2,4,1,""],get_list_as_string:[2,4,1,""],init128:[2,4,1,""],make_dir:[2,4,1,""],my_error:[2,4,1,""],none_or_int:[2,4,1,""],none_or_str:[2,4,1,""],normal_exit:[2,4,1,""],product:[2,4,1,""],put_file_to_ecserver:[2,4,1,""],read_ecenv:[2,4,1,""],send_mail:[2,4,1,""],setup_controldata:[2,4,1,""],silent_remove:[2,4,1,""],submit_job_to_ecserver:[2,4,1,""],to_param_id:[2,4,1,""],to_param_id_with_tablenumber:[2,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"00h":[6,11],"10u":19,"10v":19,"12h":[6,11],"180w":6,"18utc":2,"1hourli":[8,43],"1st":43,"20c":[5,6,19,21,22,23,36,42,43],"20gb":43,"24h":[2,6],"25th":43,"31st":43,"32000mb":[10,13],"3200mb":[4,13],"36hour":[8,43],"3hourli":[8,43],"4th":43,"6th":43,"althanstra\u00df":35,"boolean":2,"break":17,"case":[0,2,4,6,10,13,14,17,19,21,22,31,32,33,42,43],"class":[0,5,6,31],"default":[2,3,5,6,8,10,11,12,18,19,43],"export":[4,10,13],"f\u00fcr":13,"final":[0,2,11,15,17,19,21,43],"float":[2,11],"function":[2,17,41],"import":[2,6,11,30,31,33,39,43],"int":[2,6,30,32,43],"long":43,"m\u00e4r":31,"new":[2,6,10,11,17,18,41,43,44],"public":[2,5,6,8,10,11,12,14,22,23,24,31,36,39,41],"return":[2,4,10],"short":[2,5,6,17,30,43],"switch":[2,4,6,10,13,19],"true":[0,2],"try":[31,42],"while":[22,43],ARE:5,But:43,C3S:23,CDS:[2,22,23,33,36,42],Dps:[2,6],ENS:[23,43],FOR:[11,12],For:[0,2,3,5,6,9,11,12,13,14,18,19,21,22,24,30,32,33,39,42,43],HAS:[11,12,30,31,32,43],Has:[6,11],IDs:[6,15,43],Its:2,NOT:[11,12,31],Not:12,One:31,PBS:[4,10,13],THE:[11,12,30,31,32,43],THESE:[11,12,30,31,32,43],The:[0,2,7,13,14,15,17,18,19,20,21,22,30,31,32,39,42,43,44],Then:[2,11,14,42],There:[2,18,19,22,39,42,43],These:[2,4,10,13,17,42,43],Use:[0,6,30,32,43],Used:[2,12],Useful:43,Uses:2,Using:31,WITH:[11,12],With:[6,11,12,43],_acc:19,_config:2,_expand:2,_file:0,_local:44,_orolsm:19,_templat:2,a_0:17,a_1:17,a_2:17,a_3:17,abcd:2,abl:[2,13,17,18,22,30,43],about:[2,5,11,14,19,33,39,42,43],abov:[2,39,43],accept:[6,14,21,22,42],access:[2,5,6,12,14,19,23,24,30,31,32,39,41,42,43],accmaxstep:[2,5,6,10,43],accomplish:15,accord:[6,12,43],account:[30,32,39,42,43],acctim:[2,5,6,10,43],acctyp:[2,5,6,10,43],accumlu:2,accumul:[2,6,17,19,43],accur:43,accuraci:[2,5,6,10,19,21],achiev:21,action:[23,31,32],activid:32,actual:[2,6,12,13,18,19,42,43],adapt:[0,2,5,6,9,11,12,13,18,30,31,32,33,36,43],add:[2,43],added:[17,19],adding:[2,43],addit:[2,5,11,14,15,17,30,39,43],addition:[2,5,6,14,18,20,30,43,44],addpar:[2,5,6,10,43],address:[2,6,19,30,32,43],adjac:17,adjust:41,admin:[30,31,33],adress:12,advanc:[2,43],aerosol:35,affect:17,after:[2,5,6,11,12,15,17,18,19,43],afterward:[2,13,17,30,31,32],again:[11,12],against:43,aggreg:19,agreement:[14,22,41],algorithm:[2,17,36],alist:2,all:[2,5,6,8,11,12,13,15,17,19,30,31,32,33,39,42,43,44],allow:[2,6,11,22],alpabet:2,alreadi:[2,11,22,30,31,32,42,43],also:[2,5,6,10,11,12,15,17,18,19,21,22,32,39,42,43],altern:42,alwai:[6,11],amount:[2,6,11,17,39],anaconda:[31,42],analys:21,analysi:[2,5,6,11,19,22,39,43],ani:[2,3,5,6,11,12,14,17,21,32,33,42,43,44],ann:[2,5,10,11,12,19,35],annep:10,announc:[43,44],anog__ml:19,anog__sl:19,anoth:[2,6,22,43],ansh__sl:19,anymor:[3,36],anyon:44,anyth:[6,11,12,13],api:[2,6,11,14,22,23,33,36,42,43],app:[30,32],appear:[21,43],append:2,appli:[2,11,17,21,36,42,43],applic:[2,4,6,7,9,10,11,12,13,20,21,42,43,44],approach:17,appropri:[6,43],approri:6,april:43,apt:[30,31],arbitrari:2,archiv:[2,5,11,18,20,22,30,41,42],area:[2,5,6,10,11,12,17,19,31,43],arg:2,argument:[2,11,12,18,22,30,31,32,42,43,44],aris:14,around:[17,20],arrai:2,arrang:2,array_t1:2,array_t2:2,array_t3:2,array_t4:2,articl:[2,6],ascrib:17,ask:[19,32,41,42,44],aspect:42,assign:2,assign_args_to_control:2,assign_envs_to_control:2,assimil:43,assoc_nam:30,associ:[2,12,30],assum:[21,31],atm:21,atmospher:[17,20,23,41,43],attent:[6,43],attribut:[2,11,12,41],august:43,austria:35,author:[2,5,11,12,32],auto:38,automat:[6,11,14,17,22,30,32,43,44],autoprogram:1,avail:[2,3,5,6,11,12,15,17,19,21,22,23,30,31,32,33,39,42,43],averag:17,avoid:[19,21,36,43],awar:43,awk:[4,13],back:[6,11,42],bahaviour:5,ball:[2,4,12,42],base:[2,7,10,11,17,36,39],basetim:[2,5,6,10,11,17,36,43],bash:[11,12],basic:[2,17],batch:[4,10,11,12,13,18,20,30,43],bdynam:31,beaver:[30,31],becaus:[21,43],beck:2,been:[15,30,31,32,42],befor:[0,2,6,10,17,32,39,42,43],begin:[2,13,17],beginn:[18,43],behaviour:18,being:[12,13,19],belong:[42,43],below:[9,17,19,21,31,43],best:[6,17,39,43],better:[6,43],between:[2,4,6,7,10,17,19,21,30,43],bicub:17,big:[30,31,32],bilinear:17,bin:[4,10,11,12,13],bionic:[30,31],bit:[2,6],blank:2,block:[19,43],blockdiag:0,blockdiag_fontpath:0,blog:33,blue:[12,17],border:17,both:[2,21,31,39,43],boundari:[2,11,17],box:[2,11,12,41],bracket:43,branch:42,broader:39,bstatic:31,bug:41,build:[2,23],built:32,bunch:2,buster:[30,31],button:42,bypass:22,calc_etadot:[4,12,13,15,18,21,30,31,32,36,38,42,43],calc_etadot_fast:[30,31,32],calc_extra_elda:2,calcul:[2,5,6,15,17,19,20,43],calibr:[6,43],call:[2,4,10,11,12,13,15,18,19,30,31,42,43],can:[2,3,5,6,9,11,12,13,14,15,18,19,20,21,22,30,31,32,39,40,41,42,43,44],cancel:22,cannot:[21,43],care:[6,11],carefulli:39,carri:[2,6,17],cat:[10,13],catalogu:[6,43],catego:43,caution:43,cautiou:43,cautious:43,caveat:43,cca:[2,4,9,10,11,12,13,14,30,32,43],ccb:[4,9,10,11,13,14,30,32,43],cdot:17,cds_api:[2,10],cdsapi:31,cdsapirc:31,ce00010800:19,ce000908:43,cell:17,centr:[19,20,39,41],central:[2,17],cera20c:[6,31],cera:[5,6,19,21,22,23,36,41,42],cera_exampl:43,cera_testgrid_local_cd:19,cerapubl:43,certain:42,certif:30,chang:[5,6,11,12,13,15,17,18,19,23,32,39,41,42,43],changelog:41,charact:2,character:2,characteris:2,check:[4,6,10,11,12,15,18,30,31,33,36,42,43],check_accmaxstep:2,check_acctim:2,check_acctyp:2,check_addpar:2,check_area:2,check_basetim:2,check_condit:2,check_dat:2,check_dates_for_nonflux_fc_tim:2,check_grid:2,check_install_condit:2,check_job_chunk:2,check_len_type_time_step:2,check_level:2,check_logicals_typ:2,check_mail:2,check_maxstep:2,check_numb:2,check_path:2,check_ppid:2,check_publ:2,check_purefc:2,check_queu:2,check_request:2,check_step:2,check_tim:2,check_typ:2,checkerboard:17,choic:[21,31,43],choos:21,chosen:[2,21],chunk:[2,11],circl:17,classif:[2,6],clean:2,clean_up:2,clear:43,click:[24,42],client:[2,31],climat:[22,23,42],clist:2,clone:42,cloud:[2,6,19,43],cmd_list:2,cmp:43,coarser:[3,6],code:[0,2,6,13,31,32,36,41,42],collect:[2,39,41,43,44],collis:19,colour:17,column:2,combin:[2,11,41],come:31,comma:[2,6,43],command:[2,4,5,10,11,12,15,18,22,30,31,32,42,43],commandlin:[2,11,12,30,31,32,43,44],comment:[3,5,13],common:[2,11,12,41,43],commonli:2,commun:[15,17,39,42,43,44],compar:17,compat:[3,6,18,21],compil:[2,9,12,13,18,30,31,32,33,42],compilejob:[18,43],complet:[2,14,17,23,31,36,43],complex:39,compon:[0,2,17,19,42],composit:[5,19,43],comprehens:5,comput:[13,17,21,22,23,30,42,43],concaten:2,concatenate_sign:2,concern:2,conda:31,condit:[2,6,11,17],conduct:12,configur:[2,12,42],confluenc:2,confus:39,congratul:42,connect:[2,22,30,32,43],conrtol:43,conserv:[2,6,17],consider:17,consist:[2,3,11,17,18,19,20,21,39,43],consol:[30,31],constel:8,constitut:11,construct:[0,27,28,29,37,38,40],consum:31,contact:23,contain:[0,2,5,7,11,13,17,19,21,33,42,43,44],content:[2,6,13,23,30,32,41,43],context:2,continu:[2,6,17,43],control:[2,10,11,12,13,15,19,21,22,38,39,41,42,44],control_:[5,43],control_cera:[8,10,43],control_cont:13,control_ea5:[8,11,12,30,31,32,43],control_ei:[8,43],control_od:[8,43],controlfil:[10,11,12,13,30,31,32,43],controlparamet:5,convect:[2,11,17,19],conveni:43,convent:[2,5],convers:[2,20],convert2:[2,36],convert:[2,15,17,42,43],coordin:[5,19,38,39,43],copernicu:42,copi:[2,11,12,41,43],copy_dummy_msg:2,copyright:[2,11,12],corner:6,correct:[2,6,36,43],correctli:[2,6],correspon:18,correspond:[2,6,11,13,19,43],cost:21,could:[17,43],count:[6,11],counter:2,coupl:[2,8,9,12,13,43],crai:[4,10,13],creat:[0,2,4,6,7,10,11,12,13,15,18,20,21,30,32,43,44],creativ:[2,11,12,41],creativecommon:[2,11,12,41],credenti:[12,13,15,18,31,42,43,44],cross:6,csv:[2,6,15,19,43],cubic:2,current:[0,2,6,9,12,14,21,31,40,42,43],cvh:19,cvl:19,cwc:[2,5,6,10,43],cycl:43,cyclic:[6,21],d64:[30,32],dai:[2,6,11,17,19,23,30,31,43],daili:[6,43],damp:17,dapoli:2,darain:2,dark:17,dat:11,data:[2,5,8,11,12,15,20,21,22,23,31,36,38,41,42],data_retriev:2,databas:23,dataset:[2,5,6,10,11,14,17,18,19,21,22,23,31,39,41],datatyp:[11,19],date:[2,5,6,11,12,17,19,31,43],date_chunk:[2,5,6,10,11,43],date_time_steprang:19,datechunk:2,datelin:6,datetim:2,deacc_flux:2,deaccumul:[2,43],debian:[30,31],debug:[2,5,6,9,10,11,19,21,31,36,43],decid:[2,5,18,42,43],decis:[2,43],declar:43,declin:22,decompos:2,defin:[2,5,6,10,11,12,19,21,24,39,42,43],definit:[2,5,18,41],degre:[6,21,43],degress:3,dejavu:0,dejavuserif:0,del_convert_build:2,delai:44,delet:[2,6,19,32,43],delete_fil:2,delta:17,delta_t:2,demand:[17,21,31,43],demonstr:19,denot:[2,17],depart:35,depend:[2,6,11,12,13,14,15,17,19,20,21,41,43],deposit:17,deprec:2,depthbelowlandlay:19,deriv:[2,30,31],describ:[12,14,18,20,22,32,42,43],descript:[2,5,6,8,11,12,13,18,19,21,39,42,43,44],design:43,desir:[2,6,17,21],destin:[2,5,6,7,10,12,13,15,30,31,32,36,43],destination_nam:[7,13],deta:21,detail:[2,5,15,19,20,21,42,43],detect:[6,44],determin:[2,11,12,17],dev:[17,31,42],develop:[0,2,6,17,31,40,41,44],diagnost:[2,6],diagram:[0,12,15],diamond:17,dict:2,dictionari:2,differ:[2,6,8,14,21,22,39,43],differenti:[4,10,43],difficulti:15,digit:19,dimens:[2,17],dimension:[2,17,43],direct:[2,13,14,21,22,43],directli:[2,4,10,11,12,13,14,22,42,43],directoi:42,directori:[0,2,4,5,6,7,8,9,10,11,12,13,14,18,31,32,36,42,43],dis:19,disabl:[6,21],disaggegr:2,disaggreg:[5,6,15,36,38,43],discard:6,discret:[17,19],discuss:[22,40,43],disk:31,dispers:[2,6,17],displai:[2,6,32],display_info:2,disregard:2,distinct:2,distinguish:[6,11],distribut:[30,31,41,42,43],disturb:43,diverg:[19,43],divers:[2,36],divid:[2,11,17,22],do_retriev:2,document:[5,8,11,19,21,23,30,32,36,40,43],doe:[2,11,12,14,33,43],doesn:[6,11,12],doi:[6,17],doing:2,domain:[5,43],don:[31,33,42],done:[2,4,6,10,11,12,13,14,15,17,20,22,31,37,40,42,43],dot:0,doubl:[2,4,6,8,10,11,13,43],doubleelda:[2,5,6,10,43],down:[17,42],download:[23,32,36,41],download_cdsapi:31,download_cera20c_ecmwfapi:31,download_era5_cdsapi:31,download_erainterim_ecmwfapi:31,downward:[3,6,18],dpdeta:[2,5,6,10,43],dpkg:[31,42],drive:[2,19,20,43],dry:17,dtime:[2,3,5,6,10,43],due:[6,11,12,17,43],durat:43,dure:[2,4,9,12,13,15,18,31,42],each:[2,5,6,10,11,13,14,17,19,39,42,43],easi:[17,18,20,43],easier:[18,22,43],easiest:[30,31],easili:[2,11],east:[2,11],eastern:2,eastward:[17,19],ec_api:[2,10],ec_memory_per_task:[4,10,13],ec_threads_per_task:[4,10,13],ecac:32,ecaccess:[2,4,10,12,13,14,15,22,23,30,32,43],ecaccess_do_not_remov:[4,10,13,43],ecc:2,eccod:[4,10,12,13,23,30,31,32,33,36],eccodes_include_dir:[9,31],eccodes_lib:[9,31],ecd:2,ecf:[2,6,32],ecfsdir:[2,5,6,10],ecg:[4,10,13],ecgat:[2,4,6,9,10,11,12,13,14,21,30,32,43],ecgb11:[32,43],ecgb:[4,10,13],ecgid:[2,5,6,7,10,12,13,30,31,32,43],echo:[4,12,13],echom:32,ecmf:19,ecmwf:[2,4,5,6,9,10,11,12,13,14,15,17,18,19,20,21,22,23,30,32,33,36,41,43],ecmwf_env:[2,11,12,18,43],ecmwfapi:[31,33],ecmwfapirc:31,ecmwfdataserv:[2,31],ecmwfservic:[2,31],ecnam:12,econdemand:[2,5,6,10],ecscratch:32,ecstorag:[2,5,6,10],ectmp:[2,5,6,10],ectran:[2,5,6,10,15,30,32,43],ecuid:[2,5,6,7,10,12,13,30,31,32,43],ecwmf:42,edg:12,edit:[19,31],editor:[30,31,32],effect:[13,21,43],effici:[13,17,19,43],egat:12,either:[2,6,11,14,15,43],elda:[2,6,8,36,43],element:[2,3],els:[4,10,12,13],email:[2,4,6,10,13,30,32,43,44],emo:[4,10,13],emoslib:[21,23,31,32,33],empti:[2,11,12],enabl:[22,30,43],encount:42,end:[2,4,6,10,11,13,17,19,43],end_dat:[2,5,6,10,11,17,43],end_period:2,enda:[10,19,31,43],endian:[30,31,32],endif:17,endo:6,enfo:[6,8,36,43],enough:[6,39,43],ens:[8,43],ensembl:[2,6,23,36,43],ensemble_memb:19,ensur:21,enter:[30,43],entri:[2,11],env:[2,4,13],environ:[2,4,6,10,11,12,13,14,20,33,41,42,43,44],environment:[2,35,43],eof:[10,13],equal:[2,6,11,21,43],equat:[2,6,17,43],equidistantli:17,equival:[30,31],era5:[2,5,6,21,22,23,31,42,43],era:[5,6,11,19,21,22,23,36,41,42],error:[2,4,10,12,13,21,30,31,43],error_msg:2,esac:[4,10,13],escap:13,especi:[21,39,42,43],establish:[14,30],eta:[2,5,6,8,10,19,21,38,43],etadiff:[2,5,6,10,21,43],etadot:[2,6,19,43],etapar:[2,5,6,10],etayymmddhh:[6,21],etc:[31,44],europ:43,european:[20,39,41],evalu:41,even:[17,21,31,32,43],event:17,eventu:[11,15],everi:[22,30,43],everyon:6,everyth:[0,2,14,31,43],ewss:[17,19],exact:[2,17,43],exampl:[2,3,6,7,11,17,18,19,22,23,31,39,42,43],exce:43,exceed:43,excelt:0,except:[2,6,21,31,43],execut:[2,9,10,12,13,14,15,18,19,32,36,42],execute_subprocess:2,exedir:2,exist:[2,6,11,43],exit:[2,11,12],expect:[2,43],expens:[6,21],experi:[6,43,44],experienc:43,explain:43,explan:43,explanait:43,explic:20,explicit:[22,42],explicitli:[6,20,22,43],express:2,expver:[2,5,6,10,19,31],extend:43,extens:[0,2,6,17],extra:[2,5,6,14,19,36,42,43],extract:[2,5,6,19,21,22,31,43],f90:[30,31,32,36],f_i:17,facil:[22,30],fail:[2,4,6,10,13,43],failur:43,fals:2,familiar:43,faq:41,far:6,fast:20,faster:[18,22,44],fcog_acc_sl:19,fconvert:[30,31,32],fdefault:[30,31,32],feasibl:21,featur:[2,6,20,41,44],februari:5,fedir:2,feel:42,few:[6,30,32,43],fewer:43,fftw3:[31,32],fftw:[23,30,32,33],field:[2,5,11,15,20,21,23,36,41,43],field_typ:19,fig:17,figur:[14,17,43],file1:2,file2:2,file:[0,2,4,9,10,11,12,13,15,17,18,20,22,23,30,31,32,36,39,41,42,44],filemod:2,filenam:[2,17,19,43],filename_in:2,filepath:2,fill:[6,42,43],filter:[2,17],find:[5,31,39,42,43],finder:39,fine:[21,31],finer:[3,21],finish:[42,43],first:[2,5,6,11,17,31,32,36,39,42,43],fit:2,fix:[4,10,17,41],flex:[10,13,43],flex_ecmwf:[4,10,13],flex_extract:[0,2,4,5,6,8,9,10,11,12,13,14,15,17,18,19,20,21,22,30,31,32,33,39,40,43,44],flex_extract_v7:[10,13,19,31],flex_extract_v:[4,13],flex_extract_vx:[5,7,8,9,11,12,13,18,30,31,32,42,43],flexcompil:[4,13,30,32],flexextract:[10,19],flexextractdir:2,flexpart:[2,6,11,15,17,20,21,22,31,34,41,43,44],flexpart_root:[4,13],flexpart_root_script:[4,13],flexpartdir:12,flextra:[2,20,21,41],flow:[2,11,12,20],flux:[2,5,15,21,38,43],fluxyyyymmddhh:17,flxacc2:17,follow:[2,5,7,12,13,15,17,18,19,21,30,31,32,33,39,42,43],font:0,fontpath:0,fopenmp:[30,31,32],for_develop:0,forecast:[2,5,6,11,17,20,21,22,23,39,41,43],forecast_step:19,forescast:43,forg:31,forget:33,form:[6,42],format:[2,6,10,12,15,17,19,20,31,43],formul:17,fort:[2,13],fortran90:[12,21],fortran:[2,4,12,13,15,16,17,18,20,30,31,32,36,38,41,43],fortran_program:13,found:[2,5,6,9,13,19,20,21,30,31,40,43,44],four:[2,42],fp_root:2,fp_root_path:13,fp_root_script:13,fpdir:2,frac32:17,frac:17,framework:[13,30],free:42,frequent:[41,44],from:[2,3,4,5,6,10,11,12,13,14,15,17,18,19,20,22,23,30,31,32,36,39,41,42,43,44],fromfil:2,fsr:19,ftime:2,ftp:32,ftrafo:[30,31,32],ftype:2,fulfil:17,full:[2,6,11,12,21,22,31,39,41,43],fulli:39,further:[2,31,32,43],futur:[6,21,43],g_i:17,g_ig_:17,gain:17,gap:43,gate:2,gatewai:[2,4,5,6,7,9,10,12,13,14,15,18,20,22,31,32,36,41,42],gateway_nam:[7,13],gatewaynam:[12,30,32],gatewayserv:43,gauss:[2,5,6,8,10,21,38,43],gaussian:[2,6,10,19,21,23],gen_docu:0,gener:[0,4,5,10,13,17,19,21,23,30,38,42,43],general:2,generate_retrieval_period_boundari:2,genericsftp:[2,10,12,30,32],genshi:[4,10,13,30,31,32,36],geometr:2,geophys:35,geosci:17,geoscientif:[2,6,17,40],get:[2,6,9,15,30,31,32,36,39,42,43],get_cmdline_arg:2,get_dimens:2,get_inform:2,get_install_cmdline_arg:2,get_kei:2,get_list_as_str:2,gfortran:[2,9,10,12,23,30,31,32,33],gid:32,git:42,gitmob:42,give:[2,6,21,42,43],given:[2,5,10,14,17,21,31],glevelist:2,global:[5,6,8,21,39,43],gmd:[6,17],gnu:[30,31,32,42],goe:2,going:[2,6,11],good:21,grant:42,graphviz:0,grb:[2,19],greater:[6,11],green:[12,17],grep:[10,13,31,42],grib1:[2,5,6,10,15],grib2:[2,6,15],grib2flexpart:10,grib:[2,6,11,15,23,31],grib_api:[4,10,13,33,36],grib_l:19,gribmessag:11,grid:[2,3,5,6,10,17,19,20,21,23,31,43],grid_simpl:19,grid_typ:19,gridtyp:19,group:[2,4,5,12,13,14,22,31,42],groupid:[12,30,32],groupnam:12,grphreal:[30,31,32],guarante:[2,11,12,17,43],guid:[23,36,41,43],guidanc:21,haimberg:[2,35],half:[2,6,11,17,21,43],handl:[2,5,39,41],happen:0,hard:2,harmon:19,has:[0,2,4,6,8,9,10,11,12,13,14,17,20,21,22,30,31,32,39,42,43],hast:6,have:[2,3,5,6,11,12,14,15,18,22,30,31,32,33,39,42,43],hcc:19,header:2,heat:[2,17,19],heavili:21,height:[17,19],help:[2,11,12,17,18,43,44],hemispher:43,henc:[17,43],here:[2,6,8,11,15,19,31,43,44],high:[6,11,13,21,31,43],higher:[2,21],highest:21,highli:21,highlight:43,highr:[8,43],hint:[5,33,39,41,44],his:[12,39],histor:21,hittmeir:[2,6,17],home:[4,10,12,13,14,23,30,31,32,42,43],horizont:[2,5,6,17,43],hoskin:6,host:[4,10,13,43],hostnam:[32,43],hour:[2,6,11,17,19,22,43],hourli:[6,22,43],how:[2,5,6,9,15,18,22,23,39,42,43],howev:[6,15,17,19,21,22,43],hpc:[21,43],hre:[23,43],http:[2,6,11,12,17,30,32,41,42,44],humid:19,hybrid:19,i32:[30,32],i_i:17,ia3:2,ice:[2,6,43],identif:2,identifi:[2,6,11,12,17,19],identificationkeyword:2,idir:2,idirectionincrementindegre:2,ids:[2,19],idx:[2,19],ifort:12,iid:2,img:10,implement:[17,43],impli:17,importantli:39,improv:[2,43],inbetween:6,includ:[6,11,12,13,30,31,32,42,44],incorpor:42,incur:21,independ:39,index:2,index_fil:2,index_kei:2,index_v:2,indic:[2,5,17,19],individu:[2,4,6,10],ineffici:43,info:2,inform:[2,5,6,11,14,18,19,20,22,23,31,32,34,39,40,42,43,44],informt:2,init128:2,init:2,initi:[2,11,12,18,36],initialis:[2,36],input:[2,5,6,10,11,12,15,17,20,38,41,43],inputdir:[2,10,11,13,43],inputfil:[2,11],instal:[0,4,5,6,7,9,10,13,14,15,18,20,22,36,41,43],install_loc:2,install_target:[2,10,12],install_via_gatewai:2,installdir:[2,12,30,31,32,42],instanc:2,instantan:19,instead:[2,11,12,22],institut:39,instruct:[2,6,9,14,30,31,33,42,43],intact:11,integ:[2,6,11],integr:[2,17],intel:[4,10,13],intend:[6,8,11,14],interact:30,interest:[39,42],interfac:[2,5,23,24,36,43],intergovernment:39,interim:[5,6,11,19,21,22,23,31,41,42],intermedi:2,intern:[2,11,12,41],internet:43,interpol:[2,6,10,11,17,19,43],interpret:18,interv:[2,3,6,12,17,19],introduc:[17,19,36,43],introduct:23,investig:39,involv:12,ipar:2,ipnam:32,isol:17,issu:41,iter:2,its:[2,10,11,13,17,18,19,21,42,43],itself:[2,10,43],jame:[2,17],januari:43,jasper:[30,32],jdirectionincrementindegre:2,job:[2,4,6,11,12,14,15,18,19,20,30,31,32,41],job_chunk:[2,10,11,43],job_fil:2,job_id:[2,4,13],job_templ:[2,10,11,12,30,31,32,43],jobfil:2,jobnam:[2,4,13],jobop:43,jobscript:[11,18,43],journal:[17,40],jtemplat:2,june:[2,43],just:[2,3,6,12,19,31,43,44],k_i:17,keep:[2,13,17,42,43],kei:[2,31,42],kept:[6,43],keynam:2,keyvalu:2,keyword:[2,6,11,19,22,23,43],kind:[2,6,19,43],km4a:[4,10,13],know:[31,39,43],known:[5,41],korn:[2,4,10,12,18,20,36,43],kornshel:13,ksh:[13,18,43],kwd:2,label:[12,31],lagrangian:[2,6,17],larg:[2,6,11,17,19,36,43],larger:[6,11,21],last:[2,6,11,17,30,32,43],lat:[2,6,11,19,21],later:[2,31],latest:[22,42],latitu:2,latitud:[2,6,20,43],latitudeoffirstgridpointindegre:2,latitudeoflastgridpointindegre:2,latter:12,lcc:19,ld_library_path:33,lead:[6,11,13,17,32,43],learn:39,least:[2,12],leav:11,leccod:[30,31,32],leccodes_f90:[30,31,32],left:[2,5,6,10,17,21,42,43],lemo:[30,32],lemosr64:31,length:[2,17,43],leopold:[2,35],less:21,let:11,letter:[2,11,12,19,41],level:[2,5,6,10,11,12,15,18,19,21,22,31,43],level_typ:19,levelist:[2,5,6,10,11,19,31,43],levtyp:[2,19,31],lfftw3:[30,32],lib:[30,31,32,33],libeccod:[31,42],libemo:[30,31,32],librari:[4,10,12,14,20,23,31,32,41,42,44],licenc:[11,12,22,23,41],licens:[2,6,11,12,14,22,41],lies:2,light:12,like:[2,5,11,17,30,31,32,42,43],limit:[6,11,19,22,39,43],line:[2,5,11,12,13,15,17,18,19,22,30,32,42,43],linear:[2,6,17],linearli:17,link:[0,1,39,41,42,43],linux:[14,15,22,30,31,42,44],liquid:[2,6,43],list:[2,5,6,8,9,11,12,15,17,19,23,31,41,43],list_obj:2,littl:17,ljasper:[30,31,32],load:[2,4,10,13,30,32,43],local:[2,5,6,7,9,11,12,14,22,30,32,33,36,41,42],localmachin:32,localus:32,locat:[2,7,11,12,43],log:[2,4,6,10,13,31,32,42,43,44],logarithm:19,logic:[2,10],login:[32,43],lon:[2,6,11,19,21],longer:[2,6,19,36,43],longitud:[2,6,20,43],longitudeoffirstgridpointindegre:2,longitudeoflastgridpointindegre:2,longiud:2,look:[2,30,32,43],lot:[21,43,44],lower:[2,5,6,10,17,21,43],lowest:19,lp64:[30,32],lpthread:[30,32],lrwxrwxrwx:[30,31,32],lsm:19,lsp:[17,19],machin:[2,4,10,12,13,14,15,31,32,42,43],made:[2,39,43],magnitud:2,mai:[6,11,15,17,30,31,42,43],mail:[2,4,6,10,13,35,41,43],mailfail:[2,5,10,13,43],mailop:[2,5,6,10,13],main:[2,5,18,20,22,43],mainli:[19,43,44],maintain:17,make:[0,4,13,18,30,33,39],make_dir:2,makefil:[2,4,10,12,13,18,30,31,32,33,36],makefile_crai:[9,30,32],makefile_debug:[9,31],makefile_ecg:[4,9,12,30,32],makefile_fast:[9,31],manag:[13,30,31,42],mani:[17,43],manipul:2,mar:[2,6,11,15,18,20,22,23,30,31,32,33,36,41,42,43],march:[2,22,30,31,32],mark:[4,5,10,13,17,19,43],mars_request:[2,6,11,15,19,43],marsclass:[2,10,19],marsfil:2,maschin:11,mask:43,mass:21,master:42,match:2,mathrm:17,matter:[2,12],max:[6,11],max_level_list:2,maxb:[2,13,19],maxim:2,maxima:17,maximum:[2,5,6,11,43],maxl:[2,13,19],maxstep:[2,5,6,10],mcc:19,mdpdeta:[2,13,19],mean:[2,4,12,13,17,19,43],measur:21,medium:[20,39,41],member:[2,6,12,14,19,22,23,24,30,31,39,42,43],memberst:[2,6],memori:[6,11],mention:[2,13,14,39,43],merg:15,mess:42,messag:[2,11,12,19,21,30,31],meta:[2,13,19],metadiff:[2,13,19],metapar:[2,13,19],meteorolog:[2,17,19,20,35,39,41],meter:19,method:[2,5,6,11,17,19,22,38,39,40,43],mgauss:[2,13,19],might:[0,2,6,11,15,18,22,31,39,42,43],migrat:[2,23],min:17,mind:[6,43],minim:[20,42],minima:17,minimis:31,minimum:43,minut:[2,30,32],mismatch:43,missingvalu:2,mix:[19,43],mk_compilejob:2,mk_convert_build:2,mk_date:2,mk_env_var:2,mk_job_templ:2,mk_jobscript:2,mk_server:2,mk_tarbal:2,mkdir:[4,10,13],mlevel:[2,13,19],mlevelist:[2,13,19],mnauf:[2,13,19],mnt:19,mock:0,mod:[2,4,13,31],mode:[2,4,6,7,9,10,11,12,13,18,19,20,39,41,42,44],model:[2,6,15,17,19,20,21,22,23,40,41,43],modif:2,modifi:[2,17,22,31,43],modul:[4,10,13,14,30,32,42,43],modular:36,momega:[2,13,19],momegadiff:[2,13,19],moment:6,mon:17,monitor:43,monoton:[2,17],month:[11,31,43],monthli:6,more:[2,3,5,6,11,12,14,15,17,19,31,43],most:[2,6,13,39,43],mostli:[2,6,43],motiv:17,mountain:[2,11,12,41],move:[0,2,22],mreq_count:2,msgatwai:30,msl:19,msmooth:[2,13,19],much:[39,44],multipl:[2,43],multipli:[6,21],muser:[10,13],must:[5,6,11,14,32,43],my_error:2,myuser:12,name:[2,4,5,6,9,10,11,12,13,17,19,22,30,31,32,36,42,43],name_of_this_fil:[4,10,13],namelist:[2,13,19],namespac:2,namgen:[13,19],nano:[30,32],nas:[10,19],nation:39,nativ:[30,31,32],natur:17,necessari:[0,2,3,4,5,6,9,10,11,12,13,14,18,20,30,31,32,33,43,44],nedit:31,need:[0,2,3,5,6,11,12,13,14,18,19,20,21,31,32,37,40,42,43],neg:[2,17],neglect:6,net:[17,19],nevertheless:2,newer:19,newest:43,newslett:43,next:[30,32,43],nfield:2,night:43,non:[2,6,17,43],noncycl:6,none:[2,5,6,10,11,12,17,19,30,31,32,43],none_or_int:2,none_or_str:2,normal:[4,6,10,13,21,31,43],normal_exit:2,north:[2,11],northern:[2,43],northward:[17,19],notabl:43,notat:17,note:[6,15,17,32,42,43],notif:[2,5],notifi:2,novemb:[2,21],now:42,nowadai:43,nsss:[17,19],number:[2,3,4,5,6,8,9,10,11,13,17,18,19,20,21,31,36,43],numer:39,numpi:[2,30,31,32],object:2,observ:2,obtain:[17,42],obvious:17,occur:[2,17],octahedr:23,octob:11,odir:2,off:[2,5,6,19],often:21,og_orolsm__sl:19,old:[0,2,6,11,17,36,43],older:[6,15,43],omega:[2,5,6,10,21,38,43],omegadiff:[2,5,6,10,21,43],omegayymmddhh:[6,21],onc:[11,43],one:[2,5,6,11,12,17,18,19,31,32,33,42,43],ones:[17,32],onli:[2,3,5,6,11,12,17,19,21,22,31,32,42,43,44],onlin:[36,40,43],onward:6,open:[2,20,30,31,32,41,43],opend:12,oper:[2,5,6,8,10,11,12,17,21,23,31,39,41,42],operation:6,oportun:22,opportun:43,opt:19,optim:[9,12,21,43],optimis:15,option:[2,5,6,15,17,19,21,33,36,42,43],optionalind:5,orang:12,order:[2,5,17],org:[2,6,11,12,17,41],organis:39,origin:[2,6,11,17,19,43],orographi:19,other:[1,2,5,6,11,17,31,39,42,43],otherwis:[2,43],our:[23,42],out:[2,4,6,10,13,17,30,31,32,42,43],output:[2,4,5,6,10,11,12,13,17,30,31,32,36,38,41,42,43,44],outputdir:[2,10,11,13,43],outputfilelist:2,outsid:31,over:[2,17,39,43],overal:[2,19],overlap:6,overrid:[3,11],overrul:5,overview:[8,14,15,17,23,38,41,42],overwrit:[0,2,43],overwritten:[2,18,43],own:[32,39,42],p_a:17,p_b:17,p_c:17,p_d:17,packag:[0,4,10,13,20,30,31,41,42],package_nam:42,packingtyp:19,page:[30,42],panel:42,paper:40,par:2,parallel:19,param1:43,param2:43,param:[2,19,31],paramat:2,paramet:[2,3,4,5,8,10,13,15,17,18,19,20,23,30,31,32,36,39,41,42],parameteris:43,parameterlist:[11,12],parameternam:2,paramx:43,parent:[2,11,19],part:[2,17,19,20,31,32],parti:[14,20,23,41],particl:[2,6,17],pass:[2,42],passcod:30,password:[30,32],path:[0,2,4,6,8,10,11,12,13,14,31,32,33,42,43],path_flexextract_dir:2,path_fortran_src:2,path_input_dir:2,pattern:[2,43],paul:17,pbs_jobid:[10,13],pdf:21,pep8:36,per:[2,5,6,11,15,19,43],perform:[2,13,15,19,21],period:[2,5,6,11,17,30,39,43],person:12,perturb:[6,19],petra:2,phgrreal:[30,31,32],philipp:[2,5,6,11,12,17,35],physic:[35,39],pid:[19,43],piec:[17,19,31],piecewis:17,pip:[0,31,42],place:[2,12,13,14,30,43,44],placehold:[13,32],plan:[6,21],platform:42,pleas:[5,9,14,15,21,30,31,32,42,43,44],plot:23,plu:17,png:0,point:[2,11,17,19,43],polynomi:[2,17],posit:[2,6,13,17],posnam:[30,31,32],possibl:[2,5,6,8,11,12,17,21,22,31,33,42,43,44],post:[2,6,15,31],postprocess:2,pp_id:[11,43],ppid:[2,11,19],pre:17,precalcul:6,precip:19,precipit:[2,5,6,11,23,36,43],precis:33,preconvert:1,predict:[39,43],prefar:42,prefer:[6,30,31,32],prefix:[2,5,6,10,19,21],prepar:[0,2,4,6,9,10,11,12,13,14,15,20,26,41,42],prepare_flexpart:11,preprocessor:44,present:[7,12,23,30,32,42,43],preserv:17,pressur:[2,19,21,22,31],pressure_level:31,previou:[18,21],prgenv:[4,10,13],print:[2,4,13,43],print_infodata_csv:2,prior:[17,21],problem:[2,17,36,42,43,44],procedur:17,process:[2,4,6,7,9,10,11,12,13,14,15,17,18,19,22,31,36,42,43,44],process_output:2,prod:2,produc:[17,19,21,39,43],product:[2,42,43],product_typ:31,progam:42,program:[0,4,9,11,12,13,17,18,20,21,30,31,36,41,43],progress:[15,43],prompt:30,proper:18,properli:[2,12,15,42,44],properti:[2,19],propos:17,proposit:44,prot:[10,13,43],protocol:43,provid:[2,14,18,20,22,31,32,39,42,43,44],publicli:43,publish:[17,39],pull:31,pure:[2,6,11,15,43],purefc:[2,10],purpos:[2,6],put:[2,6,12,13,19],put_file_to_ecserv:2,pycallgraph:0,pylint:0,pyrevers:0,pyscript:11,pytest:0,python3:[4,10,13,18,30,31,32,36,42,43],python:[0,4,10,11,12,13,15,16,17,18,19,20,23,30,31,32,33,36,38,42,43],pythonxxxxx:43,qos:[4,10,13],quad:17,quantiti:[2,6,17],question:[41,44],queue:[2,4,10,11,12,13,15,30,43],queuenam:[4,10,13],queues_list:2,quick:[8,18,39,41,42],quickli:[13,43],quota:43,r64:[4,10,13,30,32],radiat:[2,17,19],raid60:10,rainfal:2,rais:[2,17],rang:[2,6,12,20,31,39,41,43],rare:43,rate:17,rather:21,raw:[2,15],reach:18,read:[2,6,12,13,15,20,21,32,33,39,43],read_ecenv:2,readi:[2,6,11],real:[23,30,31,32,43],real_tim:23,realis:17,realiti:17,realli:[21,43],reanalysi:[6,11,21,23,31,42],reason:[2,6,11,17,19,43],receiv:[15,30,43,44],recent:[10,43],recommend:[6,13,17,19,21,31,43],reconstruct:[2,17],record:42,rectangular:12,red:17,reduc:[19,21,23,43],ref:43,refactor:36,refer:[2,39],regard:[5,18,44],regardless:42,region:21,regist:[22,31,33,42],registr:[6,14,22,23,31,33,41,44],regress:[36,41],regular:[2,20,43],regular_l:19,regularli:39,rel:[17,43],relat:43,releas:[2,41,42,43,44],relev:[2,5],reli:42,remain:[2,17],rememb:42,remot:[2,4,6,7,9,10,12,13,14,15,18,20,30,41,42],remota:12,remov:[2,3,17],remove_old:2,renam:0,renew:30,repeat:2,repo:42,report:[2,41],repositori:42,repr:[2,19],repres:[2,17,19,22,23,42,43],represent:2,request:[2,4,5,6,10,11,13,15,17,22,36,43],request_numb:[2,19],requir:[2,13,14,17,21,30,31,32,41,42,43],rerun:11,research:39,resol:[2,5,6,10,19,21,43],resolut:[3,5,6,11,21,22,39,43],resolv:21,reson:31,respect:[2,17,19,42],respectivlei:18,respons:43,rest:[2,6],restrict:21,restructur:36,result:[2,15,19,21,43],retriev:[2,5,6,11,14,15,17,18,19,20,21,22,31,33,36,39,41,42,43],return_list:2,review:6,revis:36,revtriev:2,right:[2,5,6,10,17,21,22,30,31,33,42,43,44],rla0:[2,13,19],rla1:[2,13,19],rlo0:[2,13,19],rlo1:[2,13,19],root:[2,4,12,13,18,31,32,42,43],round:12,rpath:[30,32],rpm:42,rrint:[2,5,6,10,11,43],rthl:43,rudimentari:12,run:[2,5,6,7,8,10,13,15,18,19,30,31,42,43,44],run_loc:[15,43],runtim:10,rwgrib2:[30,31,32,36],sabin:2,same:[2,6,11,22,30,31,33,43],sampl:[2,31],sardeshmukh:6,save:[11,19,21,31,43],sbatch:[4,10,13],scale:[2,11,17,19],scaveng:17,scenario:[14,17,43],schemat:17,scheme:[2,6,17,19,43],scientif:23,scope:6,scp:32,scratch:[4,10,13,43],scriot:0,script:[2,5,6,10,13,14,15,17,18,19,20,21,23,30,31,32,36,42,43,44],scroll:42,sdor:19,second:[6,11],section:[5,12,18,22,31,36,37,39,40,42,43],see:[2,5,6,9,11,12,14,15,18,19,20,21,22,24,30,31,32,34,42,43],seem:43,seen:18,seibert:[2,6,17],select:[2,3,5,6,11,12,14,19,22,30,32,39,41,42],selectwher:2,send:[2,4,10,11,12,13,15,18,21,30,41,43,44],send_mail:2,sensibl:[2,17,19],sent:2,separ:[5,19],sepeart:2,seper:[2,6,43],septemb:[6,12,21],seqdiag:0,seqdiag_fontpath:0,sequenc:15,seri:[2,17],serv:[18,19,20,23,41,43],server:[2,4,5,6,7,9,10,11,12,13,14,15,18,20,22,30,31,32,36,42,43],servic:[30,39],session:[4,10],set:[0,2,4,5,6,8,10,11,12,13,17,18,19,20,21,24,30,31,32,33,36,42,43,44],set_kei:2,setup:[14,15,18,30,31,32,42,43],setup_controldata:2,sever:[19,42],sfc:[19,31],sgn:17,shade:17,share:[0,44],she:14,shell:[2,4,10,11,12,15,18,20,30,31,36,42,43],shift:17,shorten:43,shortli:43,shortnam:19,should:[0,2,6,9,12,13,17,19,21,30,31,32,33,36,42,43],shouldn:6,show:[7,11,12,15,17,43],shown:[9,17,31,43],side:42,sign:[4,5,10,13,42],signal:43,silent_remov:2,similar:14,simpl:[6,17,31],simplest:17,simplifi:36,simul:2,sinc:[2,12,15,19,21,31,43,44],singl:[2,4,10,11,13,15,19,33,42,43],site:[30,31],size:43,sketch:[12,14,15],skip:[2,31],skt:19,slope:17,slurm:[13,23],small:[31,43],smaller:[2,6,11,19],smooth:[2,5,6,10,17,21,43],softwar:[2,6,12,13,14,20,21,23,30,31,32,41,42],solar:[2,17,19],sole:[6,19],solut:[2,44],some:[0,2,4,5,6,10,11,12,13,14,15,18,19,20,22,31,32,39,41,42,44],someth:43,sometim:[6,43],soon:[6,43],sort:[2,5],sourc:[0,2,4,9,10,11,12,13,18,20,31,33,36,41,42,43],south:[2,11],souther:2,southern:2,space:[2,5,11,17,43],spar:2,spatial:[5,6,39],spdx:[11,12],speak:42,speci:17,special:39,specialis:43,specif:[2,4,5,6,10,11,13,14,15,17,19,21,36,39,41,42],specifc:[2,11],specifi:[2,6,11,12,17,30,31,32,39,43],spectral:[2,6,20,21,43],speed:43,sphere:6,spheric:19,sphinx:36,sphinxcontrib:0,split:[15,17,19],sqrt:17,src_path:2,srvx8:10,ssh:[32,43],sshf:[17,19],ssr:[17,19],sss:6,stamp:19,standard:[2,30,31,32,42,43],start:[2,4,5,6,10,11,12,13,18,19,30,31,32,33,39,41,42],start_dat:[2,5,6,10,11,17,43],start_period:2,state:[2,12,14,22,23,24,30,31,39,42,43],statement:[2,30,32],statist:42,statu:[15,42],steer:2,step:[2,3,5,6,10,11,13,15,17,19,24,30,31,33,43],steprang:[2,11,19],still:[3,15,21,37,40,43],stl1:19,stop:[2,42],storag:[2,5],store:[2,6,10,11,12,15,19,21,22,23,31,42,43],str:2,str_of_list:2,straightawai:43,straightforeward:43,stream:[2,5,6,10,19,31,36,43],stress:[2,17,19],string:[2,5,6,11,12],structur:[10,36,39,43],studi:21,style:36,sub:[2,17,19],subgrid:[2,11],subinterv:17,subject:[2,30,32,43],submiss:[2,4,10,12,20,43],submit:[4,5,10,12,13,14,15,18,19,30,32,43,44],submit_job_to_ecserv:2,subprocess:2,subsect:21,subsequ:[6,43],subset:[6,11,43],substitut:[2,4,9,10,13,31,32,36,43],subtract:[6,43],succeed:[30,31],success:[4,13,19,30,32],success_mod:2,successful:42,successfulli:[18,42],suggest:31,suit:[6,43],sum:[2,6,18,43],supplement:19,support:[2,17,23,39,41,42,43],suppos:2,sure:31,surfac:[2,6,15,17,19,21,22],swvl1:19,symmetri:17,syntax:[2,6],synthes:[6,36],system:[2,4,6,10,11,13,20,21,30,31,32,41,42,43],sytem:[30,31],t1279:[21,43],t799:21,tab:[42,43],tabl:[2,5,17,19,41,42,43],table128:2,take:[2,31,43],taken:[2,6,18,19,39,43],tar:[2,4,12,13,32,42],tarbal:[2,30,32],tarball_path:2,tarfil:32,target:[2,12,19,30,31,32],task:[2,18,20,43],tcc:19,team:41,technic:23,tell:[2,43],temp:[2,4,10,11,43],temperatur:[19,31],templat:[2,4,5,7,10,11,12,18,30,31,32,36,43],tempor:[5,6,17,19,22,43],temporal_properti:19,temporari:[2,6,11,43],tendenc:21,tenth:6,term:[42,43],termin:[30,31],test:[0,2,5,6,12,13,19,22,33,36,41,43],textbf:17,textrm:17,than:[2,6,11,19,21,31,44],thei:[0,2,5,6,9,11,12,15,17,18,19,31,39,43],them:[0,2,6,11,12,15,17,18,19,39,43],therebi:[17,21],therefor:[0,2,6,17,18,19,31,39,42,43],thi:[0,2,4,5,6,7,8,10,11,12,13,14,17,18,19,21,22,30,31,32,33,37,39,40,41,42,43,44],thick:17,thing:5,think:[2,42],third:[14,20,23,41],those:[5,43],thousandth:6,three:[2,11,17],through:[2,5,22,24,30,42,43],throughout:17,thu:[17,43],ticket:[34,41],time:[2,3,4,5,10,11,13,15,17,19,21,23,31,33,39,43,44],timeseri:[2,17],timespan:[2,17],timestamp:2,tld:32,tmc:[10,31],tmpdir:[10,13],to_list:2,to_param_id:2,to_param_id_with_tablenumb:2,todai:43,todo:43,togeth:[2,12,15,19,42,43],token:30,too:[6,11,17,31,43],tool:[4,10,14,15,43],toolkit:22,top:[11,12,18],topic:39,total:[19,43],touch:43,trace:17,train:23,transfer:[2,5,6,7,12,13,15,19,30,32,43],transform:2,transport:[20,41],trapezoid:12,treatment:39,tree:43,tri:2,triangular:[2,6],trigger:[2,21],troubl:43,troubleshoot:[23,43],truetyp:0,truncat:[2,6],ttf:0,tupl:2,turbul:[17,19],twice:43,twiceadai:[8,43],two:[2,6,11,12,14,17,18,19,21,22,31,42,43],type:[0,2,3,4,5,6,10,11,13,17,18,19,30,31,32,42,43],typeoflevel:19,typic:[15,19,23,43],ubuntu:[30,31],udoc:2,uid:32,un_tarbal:2,unavail:44,unchang:17,under:[0,2,11,12,13,14,17,27,28,29,30,31,37,38,40,41,43],understand:[5,13,18,20,39,43],underw:43,undesir:17,unfortun:[17,22],uniqu:[2,19],unit:[0,17,21,36],univers:[2,35],univi:[10,35,44],unix:44,unless:6,unload:[4,10,13],unrealist:17,unreason:36,untar:[2,4,12,32,42],until:[6,11,17,22,43],updat:41,upfront:[2,6,43],upgrad:36,upper:[2,5,6,10,21,43],upstream:43,upto:2,usa:[2,11,12,41],usag:2,use:[0,2,6,9,12,13,18,20,21,22,30,31,32,33,36,39,42,43],used:[2,5,6,8,9,11,12,13,14,17,19,20,31,32,36,39,42,43,44],useful:[5,6,11,39,43],user:[2,4,5,10,11,12,13,14,18,20,22,23,24,30,31,32,33,36,39,42,43,44],user_group:[7,13],user_nam:[7,13],usergroup:13,usernam:[12,13,30,31,32],uses:[0,4,10,17,22,30,32,43],using:[2,6,11,12,17,30,31,32,42,43],usr:[0,4,10,13,30,31,32],usual:[5,6,11,13,15,19,31,43],utc:[6,11,43],util:[2,15],uza:35,v10:19,v20_update_protocol:21,v30_update_protocol:21,v40_update_protocol:21,v60_update_protocol:21,valid:[2,6,12,19,32,43],valu:[2,3,5,6,8,10,11,12,13,17,18,21,30,32,43],valuer:2,vanish:17,vari:[6,31,43],variabel:[4,10],variabl:[2,6,10,11,13,17,31,33,36,43],varianc:5,variat:[6,19],veloc:[15,19,20,43],veri:[2,6,11,17,21,31,39,43],version:[2,3,4,6,9,10,12,13,15,18,21,31,33,36,42,43,44],version_numb:13,vertic:[5,11,15,20,38,39,43],via:[2,4,10,11,13,14,15,22,23,30,31,32,36,43],vienna:[2,35],view:[2,11,12,13,41,44],virtual:42,visit:[2,11,12,30,41],vol:6,wai:[13,15,17,21,22,30,31,39,42,43],wait:22,want:[6,17,20,43],warn:[2,12,31],water:[2,6,19,43],wave:21,weather:[6,20,39,41],web:[2,6,11,14,22,23,24,33,36,42,43],webapi:[2,6],webserv:22,websit:[2,30,31,42,43,44],wedg:17,well:[2,6,15,21,39,42,43],were:[2,6,11,12,19,36,43],west:[2,11],western:2,wet:17,wether:[2,12],what:[5,23,31,41,43],whatev:43,when:[2,4,6,10,17],whenev:21,where:[2,6,9,11,12,13,17,19,20,21,31,42,43],wherea:[6,15],wherebi:11,wherekei:2,wherekeynam:2,wherekeyvalu:2,whether:42,which:[0,2,3,4,5,6,7,9,10,11,12,13,14,15,17,18,19,20,21,22,30,31,36,39,42,43,44],whith:10,who:20,whole:[2,17,39,43,44],whose:19,why:17,wiki:[2,6,32],wil:2,wildcard:43,wind:[5,19,43],window:[30,31,43],wish:42,within:[2,4,6,10,11,17,30,32,43],without:[2,13,22,33,42,43],word:2,work:[0,2,7,10,11,12,13,14,15,19,20,22,31,41,42,43],workdir:[4,10,13],workload:13,workspac:[10,19,43],workstep:20,would:[6,11,22,30,31,43],wrap:[11,12,18,20],wrf:[2,5,10],write:[2,6,44],write_namelist:2,write_reqhead:2,written:[2,6,21],www:42,x86_64:31,xvf:[4,13,32,42],xxx:19,xxxx:6,xxxxx:43,xxyymmddhh:2,year:[31,43],yet:43,yield:[2,21],you:[0,3,5,6,21,24,30,31,32,33,42,43,44],your:[24,30,31,32,42,43,44],yourself:24,yymmdd:[6,19],yymmddhh:[6,19,21],yyyymmdd:[2,6,11],yyyymmddhh:[17,19],zamg:[36,44],zero:[2,17,21],zonal:21},titles:["Update Documentation","Fortran\u2019s Auto Generated Documentation","Python\u2019s Auto Generated Documentation","CONTROL file changes","The Compilation Jobscript <code class=\"docutils literal notranslate\"><span class=\"pre\">compilejob.ksh</span></code>","The CONTROL file","The CONTROL parameters","ECMWF User Credential file <code class=\"docutils literal notranslate\"><span class=\"pre\">ECMWF_ENV</span></code>","CONTROL file examples","The Fortran Makefile - <code class=\"docutils literal notranslate\"><span class=\"pre\">calc_etadot</span></code>","The Jobscript <code class=\"docutils literal notranslate\"><span class=\"pre\">job.ksh</span></code>","The executable Script - <code class=\"docutils literal notranslate\"><span class=\"pre\">run.sh</span></code>","The Installation Script - <code class=\"docutils literal notranslate\"><span class=\"pre\">setup.sh</span></code>","Templates","Application Modes","Program Flow","Auto Generated Documentation","Disaggregation of Flux Data","Control & Input Data","Output Data","Overview","Vertical Coordinate","Access Modes","Link Collection for Quick finder","Hints to specify dataset retrieval","Available Datasets for Member State users","Available Datasets for Public users","Metrics","Static Code Analysis","Testcases","Gateway mode installation","Local mode installation","Remote mode installation","FAQ - Frequently asked questions","Known Bugs and Issues","Developer Team","Changelog","Developer Guide","Documentation","ECMWF Data","Evaluation","Welcome to <code class=\"docutils literal notranslate\"><span class=\"pre\">flex_extract</span></code>\u2019s user documentation!","Installation","Quick Start","Support","ToDos"],titleterms:{"class":2,"new":[19,36],"public":[26,42,43],"static":28,CDS:[31,34],The:[4,5,6,9,10,11,12],access:22,addit:[0,6,19],adjust:43,agreement:42,analysi:28,api:[31,34],applic:[14,15],ask:33,auto:[1,2,16],avail:[24,25,26],block:0,bug:[34,36,44],calc_etadot:[9,19,34],calcul:21,can:[24,33],cera:43,chang:[3,36],changelog:36,check:2,code:28,collect:23,combin:[42,43],comparison:29,compil:4,compilejob:[4,13],content:[7,11,12,19],continu:21,control:[3,5,6,8,18,43],controlfil:2,convert:13,coordin:21,credenti:7,data:[6,17,18,19,24,25,34,39,43],dataset:[24,25,26,42,43],definit:43,depend:[30,31,32,42],destin:34,develop:[35,37],diagramm:0,differ:15,disaggreg:[2,17,19],distribut:33,document:[0,1,2,16,38,41],doe:[4,10],domain:6,download:42,ecflexpart:2,ecmwf:[7,31,39,42],ecmwf_env:[7,13],ensembl:19,environ:[30,31,32],equat:21,era5:34,era:43,evalu:40,exampl:[4,5,8,10,15],execut:11,faq:[33,44],featur:[36,43],field:[6,17,19],file:[3,5,6,7,8,19,21,29,43],find:24,finder:23,fix:36,flex_extract:[41,42],flexpart:[19,42],flow:15,flux:[6,17,19],forecast:19,format:5,fort:19,fortran:[1,9,19,34,42],frequent:33,from:[21,33],full:42,gatewai:[30,34,43],gener:[1,2,6,15,16],get_mars_data:2,grib:[19,29],gributil:2,guid:37,hint:[24,43],horizont:21,how:24,index:19,input:[18,19],instal:[2,12,30,31,32,33,34,42],interim:43,issu:[34,44],job:[10,13,43],jobscript:[4,10],known:[34,44],ksh:[4,10],level:25,librari:33,licenc:42,link:23,list:44,local:[15,31,43],mail:44,makefil:9,mar:[19,21,29],marsretriev:2,member:[15,25],metric:27,mode:[14,15,22,30,31,32,43],model:25,modul:2,older:17,onlin:0,oper:43,option:[11,12],out:24,output:[19,21],overview:20,packag:33,paramet:[6,11,12,21,34,43],parti:33,pre:21,precipit:[17,19],predict:19,prepar:[21,30,31,32,43],prepare_flexpart:2,problem:34,program:[2,15,19,34,42],pure:19,python:2,question:33,quick:[23,43],registr:42,releas:[34,36],remot:[32,43],report:44,request:[19,29],rest:17,retriev:24,run:11,script:[4,11,12],section:6,select:43,sequenc:0,set:15,setup:12,softwar:0,some:43,specif:43,specifi:24,sphinx:0,standard:19,start:43,state:25,submiss:11,submit:[2,11],support:44,surfac:25,system:44,team:35,temp:13,templat:13,temporari:19,test:[30,31,42],testcas:29,third:33,ticket:44,time:6,todo:45,tool:2,uiofil:2,updat:0,usag:[11,12],user:[6,7,15,25,26,41],using:21,veloc:21,version:17,vertic:[6,19,21],web:31,welcom:41,what:[4,10,24,33],wind:[6,21],workflow:15}}) \ No newline at end of file diff --git a/Documentation/html/support.html b/Documentation/html/support.html index 6652ca95be03e42230ff00b024ee7917c6ddfc13..d95f9fe4fbf79e47c66a4680cae5179d126db3b4 100644 --- a/Documentation/html/support.html +++ b/Documentation/html/support.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -176,11 +176,11 @@ </div> <div class="contents local topic" id="contents"> <ul class="simple"> -<li><a class="reference internal" href="#ticket-system" id="id2">Ticket system</a></li> -<li><a class="reference internal" href="#mailing-list" id="id3">Mailing list</a></li> -<li><a class="reference internal" href="#reporting-an-issue" id="id4">Reporting an issue</a></li> -<li><a class="reference internal" href="#known-bugs-and-issues" id="id5">Known bugs and issues</a></li> -<li><a class="reference internal" href="#faq" id="id6">FAQ</a></li> +<li><p><a class="reference internal" href="#ticket-system" id="id2">Ticket system</a></p></li> +<li><p><a class="reference internal" href="#mailing-list" id="id3">Mailing list</a></p></li> +<li><p><a class="reference internal" href="#reporting-an-issue" id="id4">Reporting an issue</a></p></li> +<li><p><a class="reference internal" href="#known-bugs-and-issues" id="id5">Known bugs and issues</a></p></li> +<li><p><a class="reference internal" href="#faq" id="id6">FAQ</a></p></li> </ul> </div> <div class="section" id="ticket-system"> @@ -200,11 +200,11 @@ <p>To properly report a problem or bug, please provide as much information as possible. This includes:</p> <ul class="simple"> -<li>the flex_extract version</li> -<li>a flex_extract log file (output of submit.py script)</li> -<li>the CONTROL file</li> -<li>the commandline arguments or run(_local).sh settings and</li> -<li>a description of the environment you used (Unix/Linux version, library version, application mode, etc.).</li> +<li><p>the flex_extract version</p></li> +<li><p>a flex_extract log file (output of submit.py script)</p></li> +<li><p>the CONTROL file</p></li> +<li><p>the commandline arguments or run(_local).sh settings and</p></li> +<li><p>a description of the environment you used (Unix/Linux version, library version, application mode, etc.).</p></li> </ul> </div> <div class="section" id="known-bugs-and-issues"> @@ -237,7 +237,7 @@ This includes:</p> <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/Documentation/html/todo.html b/Documentation/html/todo.html index 075ca43f265d4750a1404bab0ded2f3705fb8123..a8eebcd6cbde43c9a6fd606b73160191c6bb57dd 100644 --- a/Documentation/html/todo.html +++ b/Documentation/html/todo.html @@ -21,11 +21,11 @@ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="_static/js/theme.js"></script> @@ -163,21 +163,6 @@ <div class="section" id="todos"> <h1>ToDos<a class="headerlink" href="#todos" title="Permalink to this headline">¶</a></h1> -<div class="admonition-todo admonition"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO: please check the complete description and functionality of the CONTROL FILEs</p> -</div> -<p class="todo-source">(The <a class="reference internal" href="quick_start.html#index-0"><em>original entry</em></a> is located in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/For_developers/Sphinx/source/quick_start.rst, line 337.)</p> -<div class="admonition-todo admonition"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO - explain the setup with 4V fields! Who can extract it, when would this be useful?</p> -</div> -<p class="todo-source">(The <a class="reference internal" href="quick_start.html#index-1"><em>original entry</em></a> is located in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/For_developers/Sphinx/source/quick_start.rst, line 359.)</p> -<div class="admonition-todo admonition"> -<p class="first admonition-title">Todo</p> -<p class="last">@LEO: Please tell me why perturbed forecast are possible? Is it because of some user rights? I have no opportunity of retrieve PF data.</p> -</div> -<p class="todo-source">(The <a class="reference internal" href="quick_start.html#index-2"><em>original entry</em></a> is located in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/For_developers/Sphinx/source/quick_start.rst, line 406.)</p> </div> @@ -191,7 +176,7 @@ <div role="contentinfo"> <p> - © Copyright 2019, Anne Philipp and Leopold Haimberger + © Copyright 2020, Anne Philipp and Leopold Haimberger </p> </div> diff --git a/For_developers/CONTROLparameter.xls b/For_developers/CONTROLparameter.xls index 25203e3e6246ab550a37f3da7b44c07b3e44cbd4..04e5442c4edb776e63342df2de398d85348f1c11 100644 Binary files a/For_developers/CONTROLparameter.xls and b/For_developers/CONTROLparameter.xls differ diff --git a/For_developers/Sphinx/source/Developers/gen_docu.rst b/For_developers/Sphinx/source/Developers/gen_docu.rst index 77a2b8f769a20fff640f685ec606ef60c545236a..dd4959cb4ff22c336e2049f41d465054a1bf4d80 100644 --- a/For_developers/Sphinx/source/Developers/gen_docu.rst +++ b/For_developers/Sphinx/source/Developers/gen_docu.rst @@ -9,18 +9,20 @@ Additional Software Developers working on ``flex_extract`` should make extensive use of the prepared test cases, unit tests and update the documentation. For this, some additional software is necessary: -- pylint -- pytest -- mock -- graphviz -- sphinx -- pip install sphinxcontrib-exceltable -- pip install seqdiag -- pip install sphinxcontrib-seqdiag -- pip install sphinxcontrib-blockdiag -- pip install pycallgraph +.. code-block:: sh + + pip install pylint + pip install pytest + pip install mock + pip install graphviz + pip install sphinx + pip install sphinxcontrib-exceltable + pip install seqdiag + pip install sphinxcontrib-seqdiag + pip install sphinxcontrib-blockdiag + pip install pycallgraph + -#- pip install sphinx-fortran @@ -30,7 +32,7 @@ Online-documentation with Sphinx Use the scriot ``gen_docu.sh`` to generate an update of the online documentation of the python component. It uses ``pyreverse`` to generate a class and a package diagram with graphviz and overwrites the old files in the developers directory. -``pyreverse`` creates ``dot`` files and with the ``dot`` program of the ``graphviz`` software the ``png`` files are created. Everything happens in the Python source directory before moving them finally to the ``for_developers`` directory. The Sphinx source code has a ``_files`` directory which contains links to these ``png`` files and therefore they should not be renamed. +``pyreverse`` creates ``dot`` files and with the ``dot`` program of the ``graphviz`` software the ``png`` files are created. Everything happens in the Python source directory before moving them finally to the ``For_developers`` directory. The Sphinx source code has a ``_files`` directory which contains links to these ``png`` files and therefore they should not be renamed. Sequence diagramms diff --git a/For_developers/Sphinx/source/Documentation/Input/compilejob.rst b/For_developers/Sphinx/source/Documentation/Input/compilejob.rst index 2f5aec46671804b89d2a856c481bd4fd70cd9bad..9c7c3000a35657801bc7de9b7f1cb51c4d5bb999 100644 --- a/For_developers/Sphinx/source/Documentation/Input/compilejob.rst +++ b/For_developers/Sphinx/source/Documentation/Input/compilejob.rst @@ -73,7 +73,7 @@ Example ``compilejob.ksh`` module load eccodes/2.12.0 module load emos/455-r64 export FLEXPART_ROOT_SCRIPTS=${HOME} - export MAKEFILE=Makefile.gfortran + export MAKEFILE=makefile_ecgate ;; *cca*) module unload python @@ -87,18 +87,18 @@ Example ``compilejob.ksh`` export GROUP=`echo ${HOME} | awk -F / '{print $4}'` export SCRATCH=/scratch/ms/${GROUP}/${USER} export FLEXPART_ROOT_SCRIPTS=${HOME} - export MAKEFILE=Makefile.gfortran + export MAKEFILE=makefile_ecgate ;; esac mkdir -p ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION} cd ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION} # if FLEXPART_ROOT is not set this means cd to the home directory tar -xvf ${HOME}/flex_extract_v${VERSION}.tar - cd source/fortran - \rm *.o *.mod CONVERT2 + cd Source/Fortran + \rm *.o *.mod calc_etadot make -f ${MAKEFILE} >flexcompile 2>flexcompile - ls -l CONVERT2 >>flexcompile + ls -l calc_etadot >>flexcompile if [ $? -eq 0 ]; then echo 'SUCCESS!' >>flexcompile mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile diff --git a/For_developers/Sphinx/source/Documentation/Input/control.rst b/For_developers/Sphinx/source/Documentation/Input/control.rst index cb9e500e744e6774e4d4a01b6d7691d3e32bf849..fb770de664ca9a11a62bc68d4b912119711d4817 100644 --- a/For_developers/Sphinx/source/Documentation/Input/control.rst +++ b/For_developers/Sphinx/source/Documentation/Input/control.rst @@ -33,7 +33,7 @@ must be listed in the :literal:`CONTROL` files. Example CONTROL files -------------------------------- -A number of example files can be found in the directory :literal:`flex_extract_vX.X/run/control/`. +A number of example files can be found in the directory :literal:`flex_extract_vX.X/Run/Control/`. They can be used as a template for adaptations and understand what's possible to retrieve from ECMWF's archive. For each main dataset there is an example and additionally some variances in resolution, type of field or type of retrieving the vertical coordinate. diff --git a/For_developers/Sphinx/source/Documentation/Input/control_params.rst b/For_developers/Sphinx/source/Documentation/Input/control_params.rst index a1ed5b238253b9f2be9c535d0e5b842eb400cdc4..d505c9871963f4773e523aa8e1125e98c789304a 100644 --- a/For_developers/Sphinx/source/Documentation/Input/control_params.rst +++ b/For_developers/Sphinx/source/Documentation/Input/control_params.rst @@ -3,6 +3,7 @@ The CONTROL parameters ====================== + .. _ref-control-user: diff --git a/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst b/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst index a3232e2c5b7ac760975aba87152fede088e921c5..057136caee885f01651f2490160f433584883fba 100644 --- a/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst +++ b/For_developers/Sphinx/source/Documentation/Input/ecmwf_env.rst @@ -2,13 +2,13 @@ ECMWF User Credential file ``ECMWF_ENV`` **************************************** -This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the ``flex_extract_vX.X/run`` directory and will be created in the installation process for the application modes **remote** and **gateway**. +This file contains the user credentials for working on ECMWF servers and transferring files between the ECMWF servers and the local gateway server. It is located in the ``flex_extract_vX.X/Run`` directory and will be created in the installation process for the application modes **remote** and **gateway**. This file is based on the template ``ECMWF_ENV.template`` which is located in the ``templates`` directory. .. note:: - In the **local** mode it is not present. + In the **local** mode this file is not present. diff --git a/For_developers/Sphinx/source/Documentation/Input/examples.rst b/For_developers/Sphinx/source/Documentation/Input/examples.rst index 839b648c1abb72d8f4cea83291faeba1c05a30da..c61b1a54076329f417b4ebc258b2dbf899db2ff1 100644 --- a/For_developers/Sphinx/source/Documentation/Input/examples.rst +++ b/For_developers/Sphinx/source/Documentation/Input/examples.rst @@ -2,36 +2,38 @@ CONTROL file examples ********************** -``Flex_extract`` has a couple of example ``CONTROL`` files for a number of different data set constellations in the directory path ``flex_extract_vX.X/run/control``. +``Flex_extract`` has a couple of example ``CONTROL`` files for a number of different data set constellations in the directory path ``flex_extract_vX.X/Run/Control``. Here is a list of the example files and a description of the data set: CONTROL.documentation This file is not intended to be used with ``flex_extract``. It has a list of all possible parameters and their default values for a quick overview. -CONTROL_CERA -CONTROL_CERA.global -CONTROL_CERA.public -CONTROL_EA5 -CONTROL_EA5.global -CONTROL_EA5.public -CONTROL_EI -CONTROL_EI.global -CONTROL_EI.public -CONTROL_OD.ELDA.FC.eta.ens.double -CONTROL_OD.ENFO.CF -CONTROL_OD.ENFO.CV -CONTROL_OD.ENFO.PF -CONTROL_OD.ENFO.PF.36hours -CONTROL_OD.ENFO.PF.ens -CONTROL_OD.OPER.4V.operational -CONTROL_OD.OPER.FC.36hours -CONTROL_OD.OPER.FC.eta.global -CONTROL_OD.OPER.FC.eta.highres -CONTROL_OD.OPER.FC.gauss.highres -CONTROL_OD.OPER.FC.operational -CONTROL_OD.OPER.FC.twiceaday.1hourly -CONTROL_OD.OPER.FC.twiceaday.3hourly +.. code-block:: bash + + CONTROL_CERA + CONTROL_CERA.global + CONTROL_CERA.public + CONTROL_EA5 + CONTROL_EA5.global + CONTROL_EA5.public + CONTROL_EI + CONTROL_EI.global + CONTROL_EI.public + CONTROL_OD.ELDA.FC.eta.ens.double + CONTROL_OD.ENFO.CF + CONTROL_OD.ENFO.CV + CONTROL_OD.ENFO.PF + CONTROL_OD.ENFO.PF.36hours + CONTROL_OD.ENFO.PF.ens + CONTROL_OD.OPER.4V.operational + CONTROL_OD.OPER.FC.36hours + CONTROL_OD.OPER.FC.eta.global + CONTROL_OD.OPER.FC.eta.highres + CONTROL_OD.OPER.FC.gauss.highres + CONTROL_OD.OPER.FC.operational + CONTROL_OD.OPER.FC.twiceaday.1hourly + CONTROL_OD.OPER.FC.twiceaday.3hourly .. toctree:: diff --git a/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst b/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst index 894655341eca5b4430f6d3f6ac267a060aae95bc..e176135d4d176861cf1c168a68953ada23851f47 100644 --- a/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst +++ b/For_developers/Sphinx/source/Documentation/Input/fortran_makefile.rst @@ -1,37 +1,37 @@ -*********************************** -The Fortran Makefile - ``CONVERT2`` -*********************************** +************************************** +The Fortran Makefile - ``calc_etadot`` +************************************** .. _ref-convert: ``Flex_extract``'s Fortran program will be compiled during -the installation process to get the executable named ``CONVERT2``. +the installation process to get the executable named ``calc_etadot``. -``flex_extract`` has a couple of ``Makefiles`` prepared which can be found in the directory -``flex_extract_vX.X/source/fortran``, where ``vX.X`` should be substituted with the current version number. -A list of these ``Makefiles`` are shown below: +``Flex_extract`` has a couple of ``makefiles`` prepared which can be found in the directory +``flex_extract_vX.X/Source/Fortran``, where ``vX.X`` should be substituted with the current version number. +A list of these ``makefiles`` are shown below: | **Remote/Gateway mode**: | Files to be used as they are! - | **Makefile.gfortran** + | **makefile_ecgate** | For the use on ECMWF's server **ecgate**. - | **Makefile.CRAY** + | **makefile_cray** | For the use on ECMWF's server **cca/ccb**. | **Local mode** | It is necessary to adapt **ECCODES_INCLUDE_DIR** and **ECCODES_LIB** - | **Makefile.local.gfortran** - | For the use with gfortran compiler. + | **makefile_fast** + | For the use with gfortran compiler and optimization mode. - | **Makefile.local.ifort** - | For the use with ifort compiler. + | **makefile_debug** + | For the use with gfortran compiler in debugging mode. -For instructions on how to adapt the ``Makefiles`` for the local application mode +For instructions on how to adapt the ``makefiles`` for the local application mode please see :ref:`ref-install-local`. diff --git a/For_developers/Sphinx/source/Documentation/Input/jobscript.rst b/For_developers/Sphinx/source/Documentation/Input/jobscript.rst index 275295f59ce8bce13f60b41f36dbf17b2f128746..466c91f34ae0c36d5afbca74fdb276d37a6c8c0d 100644 --- a/For_developers/Sphinx/source/Documentation/Input/jobscript.rst +++ b/For_developers/Sphinx/source/Documentation/Input/jobscript.rst @@ -4,8 +4,8 @@ The Jobscript ``job.ksh`` The jobscript is a Korn-shell script which will be created at runtime for each ``flex_extract`` execution in the application modes **remote** and **gateway**. -It is based on the ``job.temp`` template file which is stored in the ``templates`` directory. -This template is by itself generated in the installation process from a ``jobscript.template`` template file. +It is based on the ``job.temp`` template file which is stored in the ``Templates`` directory. +This template is by itself generated in the installation process from a ``job.template`` template file. ``Flex_extract`` uses the python package `genshi <https://genshi.edgewall.org/>`_ to generate the Korn-shell script from the template files by substituting the individual parameters. @@ -73,7 +73,7 @@ Example ``jobscript.ksh`` module load python3 module load eccodes/2.12.0 module load emos/455-r64 - export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + export PATH=${PATH}:${HOME}/flex_extract_v7.1/Source/Python ;; *cca*) module unload python @@ -82,7 +82,7 @@ Example ``jobscript.ksh`` module load eccodes/2.12.0 module load emos export SCRATCH=${TMPDIR} - export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python + export PATH=${PATH}:${HOME}/flex_extract_v7.1/Source/Python ;; esac diff --git a/For_developers/Sphinx/source/Documentation/Input/run.rst b/For_developers/Sphinx/source/Documentation/Input/run.rst index 41d766d0a0f658ef68ae6e468d31e1939012ac4f..658b89275a0eea08a37f2d53b15326a690ef2ce0 100644 --- a/For_developers/Sphinx/source/Documentation/Input/run.rst +++ b/For_developers/Sphinx/source/Documentation/Input/run.rst @@ -12,9 +12,6 @@ Based on these input information ``flex_extract`` applies one of the application -PUT IN HERE A BLOCKDIAGRAM OF RAW PROGRAM FLOW - - Submission Parameter -------------------- @@ -42,7 +39,7 @@ Usage of ``submit.py`` (optional) --------------------------------- It is also possible to start ``flex_extract`` directly from command line by using the ``submit.py`` script instead of the wrapping Shell script ``run.sh``. This top-level script is located in -``flex_extract_vX.X/source/python`` and is executable. With the ``help`` parameter we see again all possible +``flex_extract_vX.X/Source/Python`` and is executable. With the ``help`` parameter we see again all possible command line parameter. .. code-block:: bash diff --git a/For_developers/Sphinx/source/Documentation/Input/setup.rst b/For_developers/Sphinx/source/Documentation/Input/setup.rst index 7999511d03817b2fb0b05cf4e98b7b86d8f2b84a..05fce15064106a3afe4b0821d66974bb74cb6867 100644 --- a/For_developers/Sphinx/source/Documentation/Input/setup.rst +++ b/For_developers/Sphinx/source/Documentation/Input/setup.rst @@ -12,7 +12,7 @@ It calls the top-level Python script ``install.py`` which does all necessary ope - create a tar-ball of all necessary files - copying tar-ball to target location (depending on application mode and installation path) - submit compilation script to batch queue at ECMWF servers (in **remote** and **gateway** mode) or just untar tar-ball at target location (**local mode**) -- compilation of the FORTRAN90 program ``CONVERT2`` +- compilation of the FORTRAN90 program ``calc_etadot`` The Python installation script ``install.py`` has a couple of command line arguments which are defined in ``setup.sh`` in the section labelled with "*AVAILABLE COMMANDLINE ARGUMENTS TO SET*". The user has to adapt these parameters for his personal use. The parameters are listed and described in :ref:`ref-instparams`. The script also does some checks to guarantee necessary parameters were set. @@ -155,7 +155,7 @@ Usage of ``install.py`` (optional) ---------------------------------- It is also possible to start the installation process of ``flex_extract`` directly from command line by using the ``install.py`` script instead of the wrapping Shell script ``setup.sh``. This top-level script is located in -``flex_extract_vX.X/source/python`` and is executable. With the ``help`` parameter we see again all possible +``flex_extract_vX.X/Source/Python`` and is executable. With the ``help`` parameter we see again all possible command line parameter. .. code-block:: bash diff --git a/For_developers/Sphinx/source/Documentation/Input/templates.rst b/For_developers/Sphinx/source/Documentation/Input/templates.rst index 137b36ca9696fc2d0ffdabc029c194c650168cb2..109175a39fa211a778cc407bd264f6a0ea593660 100644 --- a/For_developers/Sphinx/source/Documentation/Input/templates.rst +++ b/For_developers/Sphinx/source/Documentation/Input/templates.rst @@ -2,7 +2,7 @@ Templates ********* -In ``flex_extract`` we use the Python package ``genshi`` (`ref <https://genshi.edgewall.org/>`_) to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code. +In ``flex_extract`` we use the Python package `genshi <https://genshi.edgewall.org/>`_ to create specific files from templates. It is the most efficient way to be able to quickly adapt e.g. the job scripts send to the ECMWF batch queue system or the namelist file für the Fortran program without the need to change the program code. .. note:: Usually it is not recommended to change anything in these files without being able to understand the effects. @@ -14,8 +14,8 @@ The following templates are used and can be found in directory ``flex_extract_vX convert.nl ---------- - This is the template for a Fortran namelist file called ``fort.4`` which will be read by ``CONVERT2``. - It contains all the parameters ``CONVERT2`` needs. + This is the template for a Fortran namelist file called ``fort.4`` which will be read by ``calc_etadot``. + It contains all the parameters ``calc_etadot`` needs. .. code-block:: fortran @@ -124,7 +124,7 @@ compilejob.template mkdir -p $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION} cd $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION} # if FLEXPART_ROOT is not set this means cd to the home directory tar -xvf $${HOME}/flex_extract_v$${VERSION}.tar - cd source/fortran + cd Source/Fortran \rm *.o *.mod $fortran_program make -f $${MAKEFILE} >flexcompile 2>flexcompile @@ -190,7 +190,7 @@ job.temp module load python3 module load eccodes/2.12.0 module load emos/455-r64 - export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python ;; *cca*) module unload python @@ -199,7 +199,7 @@ job.temp module load eccodes/2.12.0 module load emos export SCRATCH=$${TMPDIR} - export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/source/python + export PATH=$${PATH}:$${HOME}/flex_extract_v7.1/Source/Python ;; esac diff --git a/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst b/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst index 909cb94456e5251e6e1585831b830943926f6a22..27fd4c1ebaa21a36dd2faee8889e8187c85740ee 100644 --- a/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst +++ b/For_developers/Sphinx/source/Documentation/Overview/app_modes.rst @@ -7,6 +7,7 @@ Application Modes .. _member state: https://www.ecmwf.int/en/about/who-we-are/member-states .. _instructions: https://apps.ecmwf.int/registration/ +.. _ECMWF's instructions on gateway server: https://confluence.ecmwf.int/display/ECAC/ECaccess+Home .. _ref-app-modes: @@ -16,12 +17,12 @@ Arising from the two user groups described in :doc:`../../Ecmwf/access`, ``flex_ .. _ref-remote-desc: 1. Remote (member) - In the **Remote mode** the user works directly on ECMWF Linux member state server, such as ``ecgate`` or ``cca``. The software will be installed in the ``$HOME`` directory. The user does not need to install any of the additional third-party libraries mentioned in :ref:`ref-requirements` as ECMWF provides everything with environment modules. The module selection will be done automatically in ``flex_extract``. + In the **Remote mode** the user works directly on ECMWF Linux member state server, such as ``ecgate`` or ``cca/ccb``. The software will be installed in the ``$HOME`` directory. The user does not need to install any of the additional third-party libraries mentioned in :ref:`ref-requirements` as ECMWF provides everything with environment modules. The module selection will be done automatically in ``flex_extract``. .. _ref-gateway-desc: 2. Gateway (member) - The **Gateway mode** can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool ``ecaccess``. The installation script of ``flex_extract`` must be executed at the local gateway server such that the software will be installed in the ``$HOME`` directory at the ECMWF server and some extra setup is done in the local ``flex_extract`` directory at the local gateway server. For more information about establishing a gateway server please see section ???. For the **Gateway mode** the necessary environment has to be established which is described in :ref:`ref-prep-gateway`. + The **Gateway mode** can be used if a local member state gateway server is in place. Then the job scripts can be submitted to the ECMWF Linux member state server via the ECMWF web access tool ``ecaccess``. The installation script of ``flex_extract`` must be executed at the local gateway server such that the software will be installed in the ``$HOME`` directory at the ECMWF server and some extra setup is done in the local ``flex_extract`` directory at the local gateway server. For more information about establishing a gateway server please see `ECMWF's instructions on gateway server`_. For the **Gateway mode** the necessary environment has to be established which is described in :ref:`ref-prep-gateway`. .. _ref-local-desc: diff --git a/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst b/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst index 21d0bdceae9bb78b9e5585845c25190ed1726d87..074d414c625e265e2dadb6d25fc79d0a802beeb9 100644 --- a/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst +++ b/For_developers/Sphinx/source/Documentation/Overview/prog_flow.rst @@ -25,7 +25,7 @@ The ``submit.py`` Python program is called by the Shell script ``run.sh`` or ``r 2. Retrieves data from MARS: It creates and sends MARS-requests either on the local machine or on ECMWF server, that receives the data and stores them in a specific format in GRIB files. If the parameter ``REQUEST`` was set ``1`` the data are not received but a file ``mars_requests.csv`` is created with a list of MARS requests and their settings. If it is set to ``2`` the file is created in addition to retrieving the data. The requests are created in an optimised way by splitting in time, jobs and parameters. 3. Post-process data to create final ``FLEXPART`` input files: - After all data is retrieved, the disaggregation of flux fields (`see here <../disagg.html>`_ ) is done as well as the calculation of vertical velocity (`see here <../vertco.html>`_) by the Fortran program ``COVERT2``. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for ``FLEXPART``. Since model level fields are typically in *GRIB2* format whereas surface level fields are still in *GRIB1* format, they can be converted into GRIB2 if parameter ``FORMAT`` is set to *GRIB2*. Please note, however, that older versions of FLEXPART may have difficulties reading pure *GRIB2* files since some parameter IDs change in *GRIB2*. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the ``ECtrans`` utility if the parameter ``ECTRANS`` is set to ``1`` and the parameters ``GATEWAY``, ``DESTINATION`` have been set properly during installation. The status of the transfer can be checked with the command ``ecaccess-ectrans-list`` (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools. + After all data is retrieved, the disaggregation of flux fields (`see here <../disagg.html>`_ ) is done as well as the calculation of vertical velocity (`see here <../vertco.html>`_) by the Fortran program ``calc_etadot``. Eventually, the GRIB fields are merged together such that a single grib file per time step is available with all fields for ``FLEXPART``. Since model level fields are typically in *GRIB2* format whereas surface level fields are still in *GRIB1* format, they can be converted into GRIB2 if parameter ``FORMAT`` is set to *GRIB2*. Please note, however, that older versions of FLEXPART may have difficulties reading pure *GRIB2* files since some parameter IDs change in *GRIB2*. If the retrieval is executed remotely at ECMWF, the resulting files can be communicated to the local gateway server via the ``ECtrans`` utility if the parameter ``ECTRANS`` is set to ``1`` and the parameters ``GATEWAY``, ``DESTINATION`` have been set properly during installation. The status of the transfer can be checked with the command ``ecaccess-ectrans-list`` (on the local gateway server). If the script is executed locally the progress of the script can be followed with the usual Linux tools. diff --git a/For_developers/Sphinx/source/Documentation/input.rst b/For_developers/Sphinx/source/Documentation/input.rst index 8506d53d1d5da9a7ac9e2f3a9c04fb53cc7c64f8..1dbfe31f6fbfc5f447fa2bacb2a522023185e5a6 100644 --- a/For_developers/Sphinx/source/Documentation/input.rst +++ b/For_developers/Sphinx/source/Documentation/input.rst @@ -34,8 +34,8 @@ Controlling .. code-block:: bash cd flex_extract_vX.X - python3 source/python/install.py --help - python3 source/python/submit.py --help + python3 Source/Python/install.py --help + python3 Source/Python/submit.py --help In this new version we provide also the wrapping Shell scripts setup_ and run_, which sets the command line parameters, do some checks and execute the corresponing Python scripts ``install.py`` and ``submit.py`` respectivley. diff --git a/For_developers/Sphinx/source/Documentation/output.rst b/For_developers/Sphinx/source/Documentation/output.rst index 76d9f2e8490bc088dcf404bf78f09c92b02d7e82..40e8310376aaa02364364b18498cb9457d3a3328 100644 --- a/For_developers/Sphinx/source/Documentation/output.rst +++ b/For_developers/Sphinx/source/Documentation/output.rst @@ -105,7 +105,7 @@ Ensembles can be retrieved and are addressed by the grib message parameter ``num Additional fields with new precipitation disaggregation ------------------------------------------------------- -The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see :doc:`disagg` ??????????????????. +The new disaggregation method for precipitation fields produces two additional precipitation fields for each time step and precipitation type. They serve as sub-grid points in the original time interval. For details of the method see :doc:`disagg`. The two additional fields are marked with the ``step`` parameter in the Grib messages and are set to "1" and "2" for sub-grid point 1 and 2 respectively. The output filenames do not change in this case. Below is an example list of precipitation fields in an output file generated with the new disaggregation method: @@ -128,7 +128,7 @@ Below is an example list of precipitation fields in an output file generated wit Temporary files =============== -``Flex_extract`` works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the ``DEBUG`` mode is switched on (see :doc:`Input/control_params`. +``Flex_extract`` works with a number of temporary data files which are usually deleted after a successful data extraction. They are only stored if the ``DEBUG`` mode is switched on (see :doc:`Input/control_params`). MARS grib files --------------- @@ -219,7 +219,7 @@ The date format is YYYYMMDDHH. The optional block ``[.N<xxx>]`` marks the ensemb fort files ---------- -There are a number of input files for the ``CONVERT2`` Fortran program named +There are a number of input files for the ``calc_etadot`` Fortran program named .. code-block:: bash @@ -244,21 +244,21 @@ The following table defines the numbers with their corresponding content. "21", "eta-coordinate vertical velocity (optional)" "22", "total cloud water content (optional)" -Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for ``FLEXPART v10`` and newer. Please see section ????????? for more information. +Some of the fields are solely retrieved with specific settings, e.g. the eta-coordinate vertical velocity is not available in ERA-Interim datasets and the total cloud water content is an optional field for ``FLEXPART v10`` and newer. -The ``CONVERT2`` program saves its results in file ``fort.15`` which typically contains: +The ``calc_etadot`` program saves its results in file ``fort.15`` which typically contains: -.. csv-table:: Output file of the Fortran program ``CONVERT2`` +.. csv-table:: Output file of the Fortran program ``calc_etadot`` :header: "Number", "Content" :widths: 5, 20 "15", "U and V wind components, eta-coordinate vertical velocity, temperature, surface pressure, specific humidity " -More details about the content of ``CONVERT2`` can be found in :doc:`vertco`. +More details about the content of ``calc_etadot`` can be found in :doc:`vertco`. .. note:: - The ``fort.4`` file is the namelist file to drive the Fortran program ``CONVERT2``. It is therefore also an input file and is described in ??????????????? + The ``fort.4`` file is the namelist file to drive the Fortran program ``calc_etadot``. It is therefore also an input file. Example of a namelist: @@ -288,4 +288,4 @@ More details about the content of ``CONVERT2`` can be found in :doc:`vertco`. .. toctree:: :hidden: :maxdepth: 2 - \ No newline at end of file + diff --git a/For_developers/Sphinx/source/Documentation/overview.rst b/For_developers/Sphinx/source/Documentation/overview.rst index 9bde61b398e8273f68dc11a835758b21a998bafa..1e9af1b4f5f8aa4bd6f92b237d8dbcbeee82a436 100644 --- a/For_developers/Sphinx/source/Documentation/overview.rst +++ b/For_developers/Sphinx/source/Documentation/overview.rst @@ -29,7 +29,7 @@ Some details on the tasks and program worksteps are described in :doc:`Overview/ - Files and modules as table with information about unit tests - Api - - Fortran program - CONVERT2 + - Fortran program - calc_etadot - Package diagram - Api diff --git a/For_developers/Sphinx/source/Documentation/vertco.rst b/For_developers/Sphinx/source/Documentation/vertco.rst index 4dea24a9e58275ba417fa64fa0daa946e8cb65bd..e0d1d6633392a6d31ac9f34002d86fe8b132d8b5 100644 --- a/For_developers/Sphinx/source/Documentation/vertco.rst +++ b/For_developers/Sphinx/source/Documentation/vertco.rst @@ -22,10 +22,10 @@ Calculation from the horizontal wind field is still required for historical case Calculation of vertical velocity from horizontal wind using the continuity equation =================================================================================== -The vertical velocity is computed by the FORTRAN90 program ``CONVERT2`` in the ECMWF -vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of ``CONVERT2`` can be found in the +The vertical velocity is computed by the FORTRAN90 program ``calc_etadot`` in the ECMWF +vertical coordinate system by applying the equation of continuity and thereby ensuring mass consistent 3D wind fields. A detailed description of ``calc_etadot`` can be found in the documents v20_update_protocol.pdf, V30_update_protocol.pdf and -V40_update_protocol.pdf. The computational demand and accuracy of ``CONVERT2`` is highly +V40_update_protocol.pdf. The computational demand and accuracy of ``calc_etadot`` is highly dependent on the specification of parameters ``GAUSS``, ``RESOL`` and ``SMOOTH``. The following guidance can be given for choosing the right parameters: @@ -44,7 +44,7 @@ following guidance can be given for choosing the right parameters: Calculation of vertical velocity from pre-calculated MARS parameter 77 ====================================================================== -Since November 2008, the parameter 77 (deta/dt) is stored in ``MARS`` on full model levels. ``FLEXTRA``/``FLEXPART`` in its current version requires ``deta/dt`` on model half levels, multiplied by ``dp/deta``. In ``flex_extract``, the program ``CONVERT2`` assumes that this parameter is available if the ``CONTROL`` parameter ``ETA`` is set to 1. +Since November 2008, the parameter 77 (deta/dt) is stored in ``MARS`` on full model levels. ``FLEXTRA``/``FLEXPART`` in its current version requires ``deta/dt`` on model half levels, multiplied by ``dp/deta``. In ``flex_extract``, the program ``calc_etadot`` assumes that this parameter is available if the ``CONTROL`` parameter ``ETA`` is set to 1. It is recommended to use the pre-calculated parameter 77 by setting ``ETA`` to 1 whenever possible. diff --git a/For_developers/Sphinx/source/Evaluation/testcases.rst b/For_developers/Sphinx/source/Evaluation/testcases.rst index aa257d29d7b2503a7eb589881f14e779ae7c1934..4855aa703ec7129d8ee536afc7dab6f715314152 100644 --- a/For_developers/Sphinx/source/Evaluation/testcases.rst +++ b/For_developers/Sphinx/source/Evaluation/testcases.rst @@ -6,14 +6,14 @@ Testcases Comparison of MARS requests =========================== - + UNDER CONSTRUCTION Comparison of grib files ======================== - + UNDER CONSTRUCTION diff --git a/For_developers/Sphinx/source/Installation/gateway.rst b/For_developers/Sphinx/source/Installation/gateway.rst index c452eb6b5868150e55aa6ae16ef28a30e41b96a9..34764c8fe0bc88e8352d77daa5dd4fb57bda945a 100644 --- a/For_developers/Sphinx/source/Installation/gateway.rst +++ b/For_developers/Sphinx/source/Installation/gateway.rst @@ -65,12 +65,12 @@ The next step is to create an *ecaccess certificate* to be able to send and rece .. code-block:: bash $ ecaccess-certificate-create - Please enter your user-id: example_username + Please enter your user-id: <username> Your passcode: *** -The easiest way to install all required packages is to use the package management system of your Linux distribution which required admin rights. +The easiest way to install all required packages is to use the package management system of your Linux distribution which requires admin rights. The installation was tested under *GNU/Linux Debian buster* and *Ubuntu 18.04 Bionic Beaver*. .. code-block:: sh @@ -105,28 +105,35 @@ If there are no error messages, you succeeded in setting up the environment. Gateway installation ==================== -``Flex_extract`` will be run on an ECMWF server which makes the setup the same as for the **remote mode**. In the ``setup.sh`` script `[ref] <Documentation/Input/setup.html>`_, select the ``makefile.gfortran`` for the ``CONVERT2`` Fortran program and the ECMWF server (*target*) you would like to use. +``Flex_extract`` will be run on an ECMWF server which makes the setup the same as for the **remote mode**. In the ``setup.sh`` script :doc:`../Documentation/Input/setup`, select the ``makefile_ecgate`` or ``makefile_cray`` for the ``calc_etadot`` Fortran program and the ECMWF server (*target*) you would like to use. The job script, send to the job queue via the ECaccess software, loads the required modules from the module system. For enabling the file transfer via the gateway, you have to set the *ECUID*, *ECGID*, *GATEWAY* and *DESTINATION* parameter values. + +Open ``setup.sh`` with your preferred editor (e.g., nano) and adapt the values: ++----------------------------------------------+----------------------------------------------+ +| Use this for target = **ectrans** | Use this for target = **cca** or **ccb** | ++----------------------------------------------+----------------------------------------------+ +| .. code-block:: bash | .. code-block:: bash | +| | | +| ... | ... | +| # -----------------------------------------| # -----------------------------------------| +| # AVAILABLE COMMANDLINE ARGUMENTS TO SET | # AVAILABLE COMMANDLINE ARGUMENTS TO SET | +| # | # | +| # THE USER HAS TO SPECIFY THESE PARAMETER | # THE USER HAS TO SPECIFY THESE PARAMETER | +| # | # | +| TARGET='ecgate' | TARGET='cca' | +| MAKEFILE='makefile_ecgate' | MAKEFILE='makefile_cray' | +| ECUID='<username>' | ECUID='<username>' | +| ECGID='<groupID>' | ECGID='<groupID>' | +| GATEWAY='<gatewayname>' | GATEWAY='<gatewayname>' | +| DESTINATION='<assoc_name>@genericSftp' | DESTINATION='<assoc_name>@genericSftp' | +| INSTALLDIR=None | INSTALLDIR=None | +| JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | +| CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | +| ... | ... | ++----------------------------------------------+----------------------------------------------+ + -.. code-block:: bash - :caption: 'Example settings for a gateway installation.' - :name: setup.sh - - # ----------------------------------------------------------------- - # AVAILABLE COMMANDLINE ARGUMENTS TO SET - # - # THE USER HAS TO SPECIFY THESE PARAMETER - # - TARGET='ecgate' - MAKEFILE='makefile.gfortran' - ECUID='uid' - ECGID='gid' - GATEWAY='localserver.tld' - DESTINATION='association_name@genericSftp' - INSTALLDIR=None - JOB_TEMPLATE='job.template' - CONTROLFILE='CONTROL_EA5' Afterwards, type: @@ -145,24 +152,18 @@ to start the installation. You should see the following on standard output. Job compilation script has been submitted to ecgate for installation in ${HOME}/flex_extract_vX.X You should get an email with subject "flexcompile" within the next few minutes! -``Flex_extract`` uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: +``Flex_extract`` automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: .. code-block:: bash - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 - -rwxr-x---. 1 USER at 353134 May 23 12:27 CONVERT2 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + lrwxrwxrwx. 1 <username> at 20 Mar 8 14:11 calc_etadot -> calc_etadot_fast.out SUCCESS! - - - - - - - diff --git a/For_developers/Sphinx/source/Installation/local.rst b/For_developers/Sphinx/source/Installation/local.rst index d0276bf56a2f8443c7241302fe7c43c4b6cc77f8..cf86470b625d135acfea6f15db98b58daf924f0a 100644 --- a/For_developers/Sphinx/source/Installation/local.rst +++ b/For_developers/Sphinx/source/Installation/local.rst @@ -61,7 +61,7 @@ and libraries, since the preparation of the extraction and the post-processing i | * `genshi`_ | * `eccodes`_ | | * `eccodes for python`_ | * `emoslib`_ | | * `ecmwf-api-client`_ (everything except ERA5) | | -| * `cdsapi`_ (just for ERA5) | | +| * `cdsapi`_ (just for ERA5 and member user) | | +------------------------------------------------+-----------------+ @@ -115,7 +115,7 @@ ECMWF Web API: Go to `MARS access`_ website and log in with your credentials. Afterwards, on this site in section "Install ECMWF KEY" the key for the ECMWF Web API should be listed. Please follow the instructions in this section under 1 (save the key in a file `.ecmwfapirc` in your home directory). CDS API: - Go to 'CDS API registration'_ and register there too. Log in at the `cdsapi`_ website and follow the instructions at section "Install the CDS API key" to save your credentials in a `.cdsapirc` file. + Go to `CDS API registration`_ and register there too. Log in at the `cdsapi`_ website and follow the instructions at section "Install the CDS API key" to save your credentials in a `.cdsapirc` file. .. _ref-test-local: @@ -262,22 +262,15 @@ Please use this piece of Python code to retrieve a small *ERA5* data sample as a - - .. _ref-install-local: Local installation ================== -First prepare the Fortran ``makefile`` for your environment and set it in the ``setup.sh`` script. (See section :ref:`ref-convert` for information on the Fortran program.) -``flex_extract`` comes with two ``makefiles`` prepared for the ``gfortran`` and -the ``ifort`` compiler. The ``gfortran`` version assumes that ``eccodes`` and ``emoslib`` are installed as distribution packages. - - * makefile.local.gfortran - * makefile.local.ifort +First prepare the Fortran ``makefile`` for your environment and set it in the ``setup.sh`` script. (See section :ref:`Fortran Makefile <ref-convert>` for more information.) +``flex_extract`` comes with two ``makefiles`` prepared for the ``gfortran`` compiler. One for the normal use ``makefile_fast`` and one for debugging ``makefile_debug`` which is usually only resonable for developers. -They can be found at ``flex_extract_vX.X/Source/Fortran``, where -``vX.X`` should be substituted with the current version number. +They assume that ``eccodes`` and ``emoslib`` are installed as distribution packages and can be found at ``flex_extract_vX.X/Source/Fortran``, where ``vX.X`` should be substituted with the current version number. .. caution:: It is necessary to adapt **ECCODES_INCLUDE_DIR** and **ECCODES_LIB** in these @@ -290,7 +283,7 @@ choice to modify with an editor of your choice. We use the ``nedit`` in this cas .. code-block:: bash cd flex_extract_vX.X/Source/Fortran - nedit makefile.local.gfortran + nedit makefile_fast Edit the paths to the ``eccodes`` library on your local machine. @@ -318,7 +311,7 @@ and **ECCODES_LIB** and save it. ECCODES_LIB= -L/usr/lib -leccodes_f90 -leccodes -lm -The Fortran program called ``CONVERT2`` will be compiled during the +The Fortran program called ``calc_etadot`` will be compiled during the installation process.Therefore the name of the ``makefile`` to be used needs to be given in ``setup.sh``. In the root directory of ``flex_extract``, open the ``setup.sh`` script @@ -337,7 +330,7 @@ and adapt the installation parameters in the section labelled with # THE USER HAS TO SPECIFY THESE PARAMETER # TARGET='local' - MAKEFILE='makefile.local.gfortran' + MAKEFILE='makefile_fast' ECUID=None ECGID=None GATEWAY=None @@ -359,23 +352,20 @@ to start the installation. You should see the following standard output. .. code-block:: bash - # Output of setup.sh - WARNING: installdir has not been specified - flex_extract will be installed in here by compiling the Fortran source in /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1/source/fortran - Install flex_extract_v7.1 software at local in directory /raid60/nas/tmc/Anne/Interpolation/flexextract/flex_extract_v7.1 - - Using makefile: Makefile.local.gfortran - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -fopenmp -I. -I/usr/local/gcc-4.9.3/grib_api-1.14.3/include -O3 preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -O3 -O3 -fopenmp -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/gcc-4.9.3/grib_api-1.14.3/lib -Bstatic -lgrib_api_f77 -lgrib_api_f90 -lgrib_api -Bdynamic -lm -ljasper -lemosR64 - - -rwxrwxr-x. 1 philipa8 tmc 282992 May 23 22:27 ./CONVERT2 - - - - + # Output of setup.sh + WARNING: installdir has not been specified + flex_extract will be installed in here by compiling the Fortran source in <path-to-flex_extract>/flex_extract_v7.1/Source/Fortran + Install flex_extract_v7.1 software at local in directory <path-to-flex_extract>/flex_extract_v7.1 + + Using makefile: makefile_fast + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -I. -I/usr/local/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -Bstatic -leccodes_f90 -leccodes -Bdynamic -lm -ljasper -lemosR64 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + + lrwxrwxrwx. 1 <username> tmc 20 15. Mär 13:31 ./calc_etadot -> calc_etadot_fast.out diff --git a/For_developers/Sphinx/source/Installation/remote.rst b/For_developers/Sphinx/source/Installation/remote.rst index b2e4d42a856f995e0722e764aabd08f40e9fb4c0..a5f863409acbb33d511de8fa96b4f163f2c795ba 100644 --- a/For_developers/Sphinx/source/Installation/remote.rst +++ b/For_developers/Sphinx/source/Installation/remote.rst @@ -76,8 +76,7 @@ Substitute *<ecuid>* with your ECMWF user name: ssh -X <ecuid>@ecaccess.ecmwf.int -This will lead to the following output on the command line, asking for your -password: +This will lead to the following output on the command line, asking for your password: .. code-block:: bash @@ -116,12 +115,12 @@ Untar the file and change into the ``flex_extract`` root directory. Execute the ``setup.sh`` script from the ``flex_extract``'s root directory. Before executing it, it is necessary to adapt some parameters from ``setup.sh`` -described in :doc:`Documentation/Input/setup`. +described in :doc:`../Documentation/Input/setup`. -Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the values: +Open ``setup.sh`` with your preferred editor (e.g., nano) and adapt the values: +----------------------------------------------+----------------------------------------------+ -| Use this for target = **ectrans** | Use this for target = **cca** | +| Use this for target = **ectrans** | Use this for target = **cca** or **ccb** | +----------------------------------------------+----------------------------------------------+ | .. code-block:: bash | .. code-block:: bash | | | | @@ -132,11 +131,11 @@ Open ``setup.sh`` with your preferred editor (e.g., ``nano'') and adapt the valu | # THE USER HAS TO SPECIFY THESE PARAMETER | # THE USER HAS TO SPECIFY THESE PARAMETER | | # | # | | TARGET='ecgate' | TARGET='cca' | -| MAKEFILE='Makefile.gfortran' | MAKEFILE='Makefile.CRAY' | -| ECUID='uid' | ECUID='uid' | -| ECGID='gid' | ECGID='gid' | -| GATEWAY=None | GATEWAY=None | -| DESTINATION=None | DESTINATION=None | +| MAKEFILE='makefile_ecgate' | MAKEFILE='makefile_cray' | +| ECUID='<username>' | ECUID='<username>' | +| ECGID='<groupID>' | ECGID='<groupID>' | +| GATEWAY='<gatewayname>' | GATEWAY='<gatewayname>' | +| DESTINATION='<username>@genericSftp' | DESTINATION='<username>@genericSftp' | | INSTALLDIR=None | INSTALLDIR='' | | JOB_TEMPLATE='job.template' | JOB_TEMPLATE='job.template' | | CONTROLFILE='CONTROL_EA5' | CONTROLFILE='CONTROL_EA5' | @@ -168,21 +167,18 @@ to start the installation. You should see the following on standard output. You should get an email with subject "flexcompile" within the next few minutes! -``Flex_extract`` uses the email address connectd to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: +``Flex_extract`` automatically uses the email address connected to the user account on ECMWF servers. The email content should look like this with a "SUCCESS" statement in the last line: .. code-block:: bash - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp phgrreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp grphreal.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -g -O3 -fopenmp ftrafo.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g rwGRIB2.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g posnam.f - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -c -O3 -I. -I/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/include -g preconvert.f90 - gfortran -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore -ffixed-line-length-132 -fopenmp -fconvert=big-endian -g -O3 -o ./CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o posnam.o preconvert.o -L/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.12.0/GNU/6.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 - -rwxr-x---. 1 USER at 353134 May 23 12:27 CONVERT2 - SUCCESS! - - - - + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./rwgrib2.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./phgrreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./grphreal.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./ftrafo.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./calc_etadot.f90 + gfortran -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -I. -I/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/include -fdefault-real-8 -fopenmp -fconvert=big-endian -c ./posnam.f90 + gfortran rwgrib2.o calc_etadot.o ftrafo.o grphreal.o posnam.o phgrreal.o -o calc_etadot_fast.out -O3 -march=native -L/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -Wl,-rpath,/usr/local/apps/eccodes/2.13.0/GNU/7.3.0/lib -leccodes_f90 -leccodes -ljasper -lpthread -L/usr/local/apps/jasper/1.900.1/LP64/lib -ljasper -lm -L/usr/local/apps/libemos/000455/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/libemos/000455/GNU/6.3.0/lib -lemos.R64.D64.I32 -L/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -Wl,-rpath,/usr/local/apps/fftw/3.3.4/GNU/6.3.0/lib -lfftw3 -fopenmp + ln -sf calc_etadot_fast.out calc_etadot + lrwxrwxrwx. 1 <username> at 20 Mar 8 14:11 calc_etadot -> calc_etadot_fast.out + SUCCESS! diff --git a/For_developers/Sphinx/source/Support/known_bugs_issues.rst b/For_developers/Sphinx/source/Support/known_bugs_issues.rst index 9ca018cf8f1ab82c790a237d0f58616e8fd34437..fdfff5cc0b08a28a7a3ec033e1fda5ba9650fdd3 100644 --- a/For_developers/Sphinx/source/Support/known_bugs_issues.rst +++ b/For_developers/Sphinx/source/Support/known_bugs_issues.rst @@ -1,4 +1,25 @@ Known Bugs and Issues -===================== +********************* + +Release v7.1 +============ + + +CDS API and ERA5 data +--------------------- + + See ticket `#230 <https://www.flexpart.eu/ticket/230>`_ on flexpart.eu for information. + + +Installation problems with ``GATEWAY`` and ``DESTINATION`` parameters +--------------------------------------------------------------------- + + See ticket `#263 <https://www.flexpart.eu/ticket/263>`_ on flexpart.eu for information. + + +Installation problems with the Fortran program ``calc_etadot`` +-------------------------------------------------------------- + + See ticket `#264 <https://www.flexpart.eu/ticket/264>`_ on flexpart.eu for information. + - \ No newline at end of file diff --git a/For_developers/Sphinx/source/_static/dev_icon.png b/For_developers/Sphinx/source/_static/dev_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..32718db05cf7a8d709096cafea96c6c2fd7ecedf Binary files /dev/null and b/For_developers/Sphinx/source/_static/dev_icon.png differ diff --git a/For_developers/Sphinx/source/_static/ecmwf_icon.png b/For_developers/Sphinx/source/_static/ecmwf_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b535c88c4f7613f61e2c44cd2cf1b81994639df Binary files /dev/null and b/For_developers/Sphinx/source/_static/ecmwf_icon.png differ diff --git a/For_developers/Sphinx/source/changelog.rst b/For_developers/Sphinx/source/changelog.rst index 31c200e2a57361b2ff74f19767322c0e4bb8d8c0..dc8b3d387e8d4a76c4b17b95360041b0cd18d3c4 100644 --- a/For_developers/Sphinx/source/changelog.rst +++ b/For_developers/Sphinx/source/changelog.rst @@ -8,6 +8,19 @@ Changelog .. _CDS API: https://cds.climate.copernicus.eu/api-how-to .. _ECMWF Web API: https://confluence.ecmwf.int/display/WEBAPI/ECMWF+Web+API+Home .. _new algorithm: https://www.geosci-model-dev.net/11/2503/2018/ + + +.. _ref-v711: + +Release v7.1.1 +-------------- + +Bug fixes +######### + * corrected naming of makefiles and Fortran program executable in online documentation + * adapted checking for ``GATEWAY`` and ``DESTINATION`` parameter + * fixed makefiles to use f90 Fortran files for ECMWF server + .. _ref-v71: @@ -32,6 +45,7 @@ Changes * upgrade from grib_api to ecCodes * completely revised/refactored python section * restructured program directories + * Fortran program name changed from ``CONVERT2`` to ``calc_etadot`` .. _ref-v704: diff --git a/For_developers/Sphinx/source/conf.py b/For_developers/Sphinx/source/conf.py index 9a5c21f9f2b9daf8096e7effdd0b5652c2755762..a5567054c209d5e8201a5807ca746ccd9df18af0 100644 --- a/For_developers/Sphinx/source/conf.py +++ b/For_developers/Sphinx/source/conf.py @@ -27,7 +27,7 @@ sys.setrecursionlimit(1500) # -- Project information ----------------------------------------------------- project = u'flex_extract' -copyright = u'2019, Anne Philipp and Leopold Haimberger' +copyright = u'2020, Anne Philipp and Leopold Haimberger' author = u'Anne Philipp and Leopold Haimberger' # The short X.Y version diff --git a/For_developers/Sphinx/source/dev_guide.rst b/For_developers/Sphinx/source/dev_guide.rst index 40dd2aebf4c3ccb836df066d95c380e9f86bee93..05cde2cccd2032d6d12935156d3b5259a7f58e2d 100644 --- a/For_developers/Sphinx/source/dev_guide.rst +++ b/For_developers/Sphinx/source/dev_guide.rst @@ -3,6 +3,9 @@ Developer Guide UNDER CONSTRUCTION +.. note:: + + This section still needs to be done. .. repository (how /who manages the code, where to get) @@ -11,4 +14,4 @@ Developer Guide :hidden: :maxdepth: 2 - Developers/gen_docu \ No newline at end of file + Developers/gen_docu diff --git a/For_developers/Sphinx/source/documentation.rst b/For_developers/Sphinx/source/documentation.rst index 77e3f6f1178386ee63fd55f54157ba128858429e..b6f78f596f5a67e82f85ee490e9c231e9f8e07e6 100644 --- a/For_developers/Sphinx/source/documentation.rst +++ b/For_developers/Sphinx/source/documentation.rst @@ -12,7 +12,7 @@ Documentation Vertical Coordinate (Under construction) - Methods (GAUSS, ETA, OMEGA) - - CONVERT + - calc_etadot Auto Generated Documentation - Python diff --git a/For_developers/Sphinx/source/evaluation.rst b/For_developers/Sphinx/source/evaluation.rst index a0d4d2a6aa7d8516b4420f448a168efcbf537dfc..65ef79934adc72117f61376f7af16e32c0486879 100644 --- a/For_developers/Sphinx/source/evaluation.rst +++ b/For_developers/Sphinx/source/evaluation.rst @@ -3,7 +3,10 @@ Evaluation UNDER CONSTRUCTION - +.. note:: + + This section in the online documentation still needs to be done. + Currently, evaluation methods and information can be found in the `flex_extract discussion paper <https://www.geosci-model-dev-discuss.net/gmd-2019-358/>`_ of the Geoscientific Model Development journal. diff --git a/For_developers/Sphinx/source/index.rst b/For_developers/Sphinx/source/index.rst index 30308dd714489b7890e2f28a3e04fe0d3104a2b9..9835e975aa60a61927233136b935645fea4d0126 100644 --- a/For_developers/Sphinx/source/index.rst +++ b/For_developers/Sphinx/source/index.rst @@ -26,7 +26,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/ecmwf_icon.png"> </div> <h2><a href="ecmwf_data.html">ECMWF data</a></h2> <ul> @@ -61,7 +61,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src=""> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/check_icon.png"> </div> <h2><a href="evaluation.html">Evaluation</a></h2> <ul> @@ -72,7 +72,7 @@ Welcome to ``flex_extract``'s user documentation! </td> <td style="width:30%;height:150px;"> <div style="width:100%;height:60px;margin-left:20%;position:relative;"> - <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/guide_icon.png"> + <img style="position:absolute;height:90%;vertical-align:bottom;" src="_static/dev_icon.png"> </div> <h2><a href="dev_guide.html">Developer</a></h2> <ul> @@ -93,10 +93,10 @@ Welcome to ``flex_extract``'s user documentation! </div> <h2><a href="changelog.html">Changelog</a></h2> <ul> + <li><a href="changelog.html#ref-v711">v7.1.1</a></li> <li><a href="changelog.html#ref-v71">v7.1</a></li> <li><a href="changelog.html#ref-v704">v7.0.4</a></li> <li><a href="changelog.html#ref-v703">v7.0.3</a></li> - <li><a href="changelog.html#ref-v60">v6</a></li> </ul> </td> <td style="width:30%;height:150px;"> diff --git a/For_developers/Sphinx/source/installation.rst b/For_developers/Sphinx/source/installation.rst index a65057f9347f1bf3ae34740210df1295ce47f70b..7e7bbe2c8e0f50082df056671b9e55e7014fa65c 100644 --- a/For_developers/Sphinx/source/installation.rst +++ b/For_developers/Sphinx/source/installation.rst @@ -123,7 +123,7 @@ git repo .. code-block:: bash - $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flexpart + $ git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flex_extract @@ -222,7 +222,7 @@ Test installation Fortran program test -------------------- -To check whether the Fortran program ``CONVERT2`` has been compiled and runs properly, it can be applied to a prepared minimal dataset. +To check whether the Fortran program ``calc_etadot`` has been compiled and runs properly, it can be applied to a prepared minimal dataset. For this, go from the ``flex_extract`` root directory to the ``Testing/Installation/Convert/`` directory and execute the Fortran program. @@ -233,19 +233,15 @@ For this, go from the ``flex_extract`` root directory to the ``Testing/Installat cd Testing/Installation/Convert # execute the Fortran progam without arguments - ../../../Source/Fortran/CONVERT2 + ../../../Source/Fortran/calc_etadot The installation was successfull if you obtain on standard output: .. code-block:: bash + + STATISTICS: 98842.4598 98709.7359 5120.5385 + STOP SUCCESSFULLY FINISHED calc_etadot: CONGRATULATIONS - readspectral: 1 records read - readlatlon: 8 records read - STATISTICS: 98842.4598 98709.7359 5120.5385 - readlatlon: 4 records read - readlatlon: 4 records read - readlatlon: 4 records read - SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS Now go back to the root directory: diff --git a/For_developers/Sphinx/source/quick_start.rst b/For_developers/Sphinx/source/quick_start.rst index a34faa12ec79b748418c485b5fc577611551b3b8..ee94135c001d64b31b2280f53aade09a3f938a85 100644 --- a/For_developers/Sphinx/source/quick_start.rst +++ b/For_developers/Sphinx/source/quick_start.rst @@ -30,7 +30,7 @@ Within this directory you can find everything you need to modify and run ``flex_ The ``Jobscripts`` directory is used to store the Korn shell job scripts generated by a ``flex_extract`` run in the **Remote** or **Gateway** mode. They are used to submit the setup information to the ECMWF server and start the jobs in ECMWF's batch mode. The typical user must not touch these files. They will be generated from template files which are stored in the ``Templates`` directory under ``flex_extract_vX.X``. Usually there will be a ``compilejob.ksh`` and a ``job.ksh`` script which are explained in the section :doc:`Documentation/input`. In the rare case of operational data extraction there will be a ``joboper.ksh`` which is designed to get the time parameters from environment variables at the ECMWF servers. -The ``Controls`` directory contains a number of example ``CONTROL`` files. These``CONTROL`` files represent the current range of possible dataset retrievals with ``flex_extract``. Some parameters in the ``CONTROL`` files can be adapted and some others should not be changed. In this :doc:`quick_start` guide we explain how an extraction with ``flex_extract`` can be started in the different :doc:`Documentation/Overview/app_modes` and point out some specifics of each dataset and ``CONTROL`` file. +The ``Controls`` directory contains a number of example ``CONTROL`` files. These ``CONTROL`` files represent the current range of possible dataset retrievals with ``flex_extract``. Some parameters in the ``CONTROL`` files can be adapted and some others should not be changed. In this :doc:`quick_start` guide we explain how an extraction with ``flex_extract`` can be started in the different :doc:`Documentation/Overview/app_modes` and point out some specifics of each dataset and ``CONTROL`` file. Directly under ``Run`` you find the files ``run.sh`` and ``run_local.sh`` and according to your selected :doc:`Documentation/Overview/app_modes` there might also be a file named ``ECMWF_ENV`` for the user credentials to quickly and automatically access ECMWF servers. @@ -149,7 +149,7 @@ The last command lists the most recent logs and temporary retrieval directories │ ├── temporary files │ ├── CE000908* (resulting files) -If the job was submitted to the HPC ( ``queue=cca`` ) you may login to the HPC and look into the directory ``/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove`` for job logs. The working directories are deleted after job failure and thus normally cannot be accessed. +If the job was submitted to the HPC ( ``queue=cca`` or ``queue=ccb`` ) you may login to the HPC and look into the directory ``/scratch/ms/ECGID/ECUID/.ecaccess_do_not_remove`` for job logs. The working directories are deleted after job failure and thus normally cannot be accessed. To check if the resulting files are still transferred to local gateway server you can use the command ``ecaccess-ectrans-list`` or check the destination path for resulting files on your local gateway server. @@ -230,7 +230,6 @@ There you can select step by step what data suits your needs. This would be the .. figure:: _files/MARS_catalogue_snapshot.png -!!!!!!!! ADD HERE ANOTHER SCREENSHOT OF THE PARAMETER SELECTION AREA ( HAS TO BE DONE AT HOME ) Additionally, you can find a lot of helpful links to dataset documentations, direct links to specific dataset web catalogues or further general information at the `link collection <Ecmwf/ec-links.html>`_ in the ECMWF data section. @@ -275,7 +274,7 @@ The main differences and features in the datasets are listed in the table shown .. figure:: _files/dataset_cmp_table.png - DO THIS TABLE AGAIN BY HAND! + A common problem for beginners in retrieving ECMWF datasets is the mismatch in the definition of these parameters. For example, if you would like to retrieve operational data before ``June 25th 2013`` and set the maximum level to ``137`` you will get an error because this number of levels was first introduced at this effective day. So, be cautious in the combination of space and time resolution as well as the field types which are not available all the time. @@ -331,12 +330,9 @@ ERA-Interim ----------- This re-analysis dataset will exceed its end of production at 31st August 2019! -It is then available from 1st January 1979 to 31st August 2019. The ``etadot`` is not available in this dataset. Therefore ``flex_extract`` must select the ``GAUSS`` parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program ``CONVERT2``. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available. - +It is then available from 1st January 1979 to 31st August 2019. The ``etadot`` is not available in this dataset. Therefore ``flex_extract`` must select the ``GAUSS`` parameter to retrieve the divergence field in addition. The vertical velocity is the calculated with the continuity equation in the Fortran program ``calc_etadot``. Since the analysis fields are only available for every 6th hour, the dataset can be made 3 hourly by adding forecast fields in between. No ensemble members are available. -.. todo:: - @LEO: please check the complete description and functionality of the CONTROL FILEs Operational data ---------------- @@ -356,9 +352,6 @@ It is recommended to submit such high resolution cases for single day retrievals These files defines the minimum number of parameters necessary to retrieve a daily subset. The setup of field types is optimal and should only be changed if the user understands what he does. The grid, domain and temporal resolution can be changed according to availability. -.. todo:: - - @LEO - explain the setup with 4V fields! Who can extract it, when would this be useful? .. note:: @@ -403,10 +396,7 @@ Ensemble members CONTROL_OD.ELDA.FC.eta.ens.double CONTROL_OD.ENFO.PF.ens -.. todo:: - @LEO: Please tell me why perturbed forecast are possible? Is it because of some user rights? I have no opportunity of retrieve PF data. - Specific features